【问题标题】:How to convert a list to a dict and concatenate values?如何将列表转换为字典并连接值?
【发布时间】:2021-06-05 19:59:15
【问题描述】:

我有一个架构列表,如下所示:

list=[('a',2),('b',4),('a',1),('c',6)]

我想做的是使用每对的第一个值作为键将其转换为字典,我还希望将具有相同键的对连接起来。对于上述结果将是:

dict={ 'a':[2,1] , 'b':[4] , 'c':[6]  }

我不关心连接值的顺序,这意味着我们也可以有'a':[1,2]

这在 python 中是如何实现的?

【问题讨论】:

  • 您可以使用for 循环遍历列表并创建字典。如果存在键,则将元素附加到键值。否则,使用一个元素列表创建字典条目。 defaultdict也可以派上用场,避免很多if-else条件
  • “告诉我如何解决这个编码问题”是off-topic for Stack Overflow。您需要发送honest attempt at the solution,然后就您的实施提出具体问题。

标签: python python-3.x list dictionary


【解决方案1】:

这样做:

l = [('a',2),('b',4),('a',1),('c',6)]

d = {}

for item in l:
    if item[0] in d:
        d[item[0]].append(item[1])
    else:
        d[item[0]] = [item[1]]

print(d) # {'a': [2, 1], 'b': [4], 'c': [6]}

为了使其更简洁,您可以使用 defaultdict 和 2 个 for 迭代器:

from collections import defaultdict

l = [('a',2),('b',4),('a',1),('c',6)]

d = defaultdict(lambda: [])

for key, val in l:
    d[key].append(val)

print(dict(d)) # {'a': [2, 1], 'b': [4], 'c': [6]})

【讨论】:

    【解决方案2】:

    如果键不在字典中,您还可以使用dict 上的setdefault 方法将列表设置为默认条目:

    l=[('a',2),('b',4),('a',1),('c',6)]
    d = {}
    
    for k, v in l:
        d.setdefault(k, []).append(v)
    
    d
    {'a': [2, 1], 'b': [4], 'c': [6]}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-11
      • 1970-01-01
      • 2016-12-03
      相关资源
      最近更新 更多