我有4个字典的清单。我也有36个值的列表。我试图遍历字典列表,以列表值按升序填充每个字典,将项1作为键,将2和3作为附加值,依此类推。最终结果是4个字典,每个字典具有三个键,每个键具有两个附加值。 最终结果将是
dict1={x:(7,4),y:(7,8),z:(7:22)}
dict2={x: (111,4),y:(111,8),z:(111:22)}
...
当前,我有以下不起作用的内容。
my_list = ['x',7,4,'y',7,8,'z',7,22,'x',111,4,'y',111,8,'z',111,22 and so on]
dict1={}
dict2={}
dict3={}
dict4={}
my_dict_list=[dict1,dict2,dict3,dict4]
for dicts in my_dict_list:
for x in range (0,len(my_list),3):
dicts[my_list[x]] = my_list[x+1],my_list[x+2]
break
该代码的输出是我所有四个字典中列表的前3个项目。这样:
>>> dict_1
{'x': (7, 4)}
>>> dict_2
{'x': (7, 4)}
>>> dict_3
{'x': (7, 4)}
>>> dict_4
{'x': (7, 4)}
我认为这是我所能获得的最接近的信息,因为它实际上正在填充每本词典,以前我只设法填充了第一本词典和其他类似的错误情况。谁能帮助我或指出正确的方向?
答案 0 :(得分:0)
尝试一下:
my_list = ['x',7,4,'y',7,8,'z',7,22,'x',111,4,'y',111,8,'z',111,22]
my_dict_list = []
idx = 0
current_dict = {}
while idx < len(my_list):
key, *vals = my_list[idx : idx + 3]
# If key repeats, starting a new current_dict, old one adding to my_dict_list
if key in current_dict:
my_dict_list.append(current_dict)
current_dict = {}
current_dict[key] = vals
idx += 3
if current_dict:
my_dict_list.append(current_dict)
print(my_dict_list)
在上述解决方案中,我们循环my_list
一次读取3个值。而且,如果重复字典的键,则将其解释为新字典的开头,因此必须将旧字典存储在my_dict_list
中。
答案 1 :(得分:0)
在python 3.8中使用itertools.islice
循环的另一种方法{p}
while
此打印
[{'x':[7,4],'y':[7,8],'z':[7,22]},{'x':[111,4],'y' :[111,8],'z':[111,22]},{},{}]
如果您的元素比字典多,这将失败,这意味着如果您有27个元素,它们是三个“三元组”,并且您只有2个字典from itertools import islice
my_list = ['x',7,4,'y',7,8,'z',7,22,'x',111,4,'y',111,8,'z',111,22]
d1,d2,d3,d4={},{},{},{}
dict_list=[d1,d2,d3,d4]
# convert to iterators for islice and next to work
iter_dict_list=iter(dict_list)
iter_my_list=iter(my_list)
# this keeps track of each dictionary, once it is three a new dictionary is
# considered for appending
completed=0
# get the first dictionary, will fail if my_list is empty
d=next(iter_dict_list)
# loop until you run out of '3-tuples'
while sub_list:=tuple(islice(iter_my_list,3)):
completed+=1
key,*value=sub_list
d[key]=value
if not completed%3:
completed=0
d=next(iter_dict_list)
print(dict_list)
,但反之则不然。 “三元组”的序列类似于d1,d2