我知道字典不能有重复的键,这很有意义...
这就是我所拥有的。
a = ['02', '02', '03']
b = ['01', '02', '01']
c = ['10G', '10G', '10G']
d = ['08', '07', '09']
newDict = dict(zip(a, zip(b, c, d)))
print(newDict)
此代码产生-
{'03': ('01', '10G', '09'), '02': ('02', '10G', '07')}
由于缺少“ 02”,因此我缺少一组数据。并且字典不能有重复的键。
将a + b作为字典键组合以输出-
{'0201': ('10G', '08'),'0202': ('10G', '07'), '0301': ('10G', '09')}
那是怎么做到的?
我尝试过
newDict = dict(zip(a + b,zip(c,d)))
但这没用
答案 0 :(得分:1)
我们可以使用字典理解。我们也不需要嵌套的zip
{x+y: (z, w) for x, y, z, w in zip(a, b, c, d)}
# {'0201': ('10G', '08'), '0202': ('10G', '07'), '0301': ('10G', '09')}
答案 1 :(得分:0)
即使每个前导字符在其行中都是唯一值,也无需将其连接起来。相反,您可以使用递归来找到适当的级别,该级别将获得唯一的密钥:
import itertools, collections
a = ['02', '02', '03']
b = ['01', '02', '01']
c = ['10G', '10G', '10G']
d = ['08', '07', '09']
def group_data(_start):
new_l = [[a, [c for _, *c in b]] for a, b in itertools.groupby(sorted(_start, key=lambda x:x[0]), key=lambda x:x[0])]
_d = {}
for a, b in new_l:
if len(b) == 1:
_d[a] = tuple(b[0])
else:
_d.update(group_data([[a+i, *c] for [i, *c] in b]))
return _d
print(group_data(list(zip(a, b, c, d))))
输出:
{'0201': ('10G', '08'), '0202': ('10G', '07'), '03': ('01', '10G', '09')}