我的 python 代碼是關于從 dict 鍵生成序列號,并且我的 dict 鍵是使用模塊中的cycle包定義的范圍。itertoolsworking example:from itertools import cyclee = {'Apple': cycle(range(1,999)),'Orange': cycle(range(1,999)),'Banana': cycle(range(1,999))}def SequenceNum(f): return f'{next(e[f])}'.zfill(3)X = SequenceNum('Apple')print(X)output001 --> it keeps incrementing in the range specified above in dict `e`Challenge:我的要求是將此字典e轉換為 json 文件。因此它將通過解析 json 文件來加載鍵和值。cat test.json{ "DATA": { "Apple": "cycle(range(1,999))", "Orange": "cycle(range(1,999))", "Banana": "cycle(range(1,999))" }}(我必須將 dict 值放在雙引號內以避免 json 文件加載錯誤。)codeimport jsonfrom itertools import cyclewith open('test.json') as f: FromJson = json.load(f)d = FromJson['DATA']print(d)def SequenceNum(f): return f'{next(d[f])}'.zfill(3)X = SequenceNum('Apple')i = 1while i <= 10: print(i, SequenceNum('Apple')) i += 1這里新的 dict 是d加載 json 文件,它將加載單引號中的值。output{'Apple': 'cycle(range(1,999))', 'Orange': 'cycle(range(1,999))', 'Banana': 'cycle(range(1,999))'} #THIS IS OUTPUT of 'd' after loading json fileTraceback (most recent call last): File "c:\Users\chandu\Documents\test.py", line 14, in <module> print(i, SequenceNum('Apple')) File "c:\Users\chandu\Documents\test.py", line 12, in SequenceNum return f'{next(d[f])}'.zfill(3)TypeError: 'str' object is not an iterator它給出了錯誤,因為我的 dict 值不能通過循環 itertools 模塊正確迭代,因為它們在引號中。我不知道這個錯誤是否還有其他原因。
1 回答

陪伴而非守候
TA貢獻1757條經驗 獲得超8個贊
如果您確定每個值是什么,則可以eval小心操作:
def SequenceNum(f):
return f'{next(eval(d[f]))}'.zfill(3)
請注意,這是非常危險的,因為eval它會評估傳遞給它的任何東西并可能造成傷害。
這也將始終從迭代器中獲取第一個值,因為它每次都被評估為新值。要解決,您可以:
def SequenceNum(f):
return eval(d[f])
i = 1
seq_iter = SequenceNum('Apple')
while i <= 10:
print(i, f'{next(seq_iter)}'.zfill(3))
i += 1
添加回答
舉報
0/150
提交
取消