我明白字典不能有重复的键,这很有道理...
这就是我所拥有的。
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)
但它并没有起作用
发布于 2018-07-20 08:09:55
我们可以使用字典理解。我们也不需要嵌套的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')}
发布于 2018-07-20 08:23:52
没有必要连接每个前导字符,即使它是其行中的唯一值。相反,您可以使用递归来查找将获得唯一键的适当级别:
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')}
https://stackoverflow.com/questions/51433342
复制相似问题