首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Python -使用"zip“组合具有重复键值的多个列表

Python -使用"zip“组合具有重复键值的多个列表
EN

Stack Overflow用户
提问于 2018-07-20 08:05:37
回答 2查看 59关注 0票数 0

我明白字典不能有重复的键,这很有道理...

这就是我所拥有的。

代码语言:javascript
复制
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)

这段代码产生--

代码语言:javascript
复制
{'03': ('01', '10G', '09'), '02': ('02', '10G', '07')}

我丢失了一组数据,因为'02‘是重复的。并且字典不能有重复的键。

把a+b组合起来作为字典键来输出会很棒--

代码语言:javascript
复制
{'0201': ('10G', '08'),'0202': ('10G', '07'), '0301': ('10G', '09')}

这是怎么做到的呢?

我尝试了newDict = dict(zip(a + b,zip(c,d)

但它并没有起作用

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-07-20 08:09:55

我们可以使用字典理解。我们也不需要嵌套的zip

代码语言:javascript
复制
{x+y: (z, w) for x, y, z, w in zip(a, b, c, d)}
# {'0201': ('10G', '08'), '0202': ('10G', '07'), '0301': ('10G', '09')}
票数 2
EN

Stack Overflow用户

发布于 2018-07-20 08:23:52

没有必要连接每个前导字符,即使它是其行中的唯一值。相反,您可以使用递归来查找将获得唯一键的适当级别:

代码语言:javascript
复制
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))))

输出:

代码语言:javascript
复制
{'0201': ('10G', '08'), '0202': ('10G', '07'), '03': ('01', '10G', '09')}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51433342

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档