【问题标题】:Python dictionary print all values for all keysPython字典打印所有键的所有值
【发布时间】:2018-05-16 04:38:01
【问题描述】:

我有两个 python 列表:

keys=[1,2,2,3,2,3]
values=['apple','book','pen','soccer','paper','tennis']

“keys”是“values”列表中对应单词的集群 ID 列表。我希望使用

打印键值对
keys=[1,2,2,3,2,3]
values=['apple','book','pen','soccer','paper','tennis']

dictionary = dict(zip(keys, values))
for key, value in dictionary.items() :
    print (key, value)

但它只打印

1 apple
2 paper
3 tennis

我真正想要的是像这样获取所有键的所有值

1 [apple]
2 [book,pen,paper]
3 [soccer,tennis]

我知道我当前的代码应该在逻辑上打印第一个输出,因为键是唯一的。但是我怎样才能改变它,让它打印所有键的所有值呢?提前谢谢!

【问题讨论】:

标签: python list dictionary key-value


【解决方案1】:
from collections import defaultdict

keys=[1,2,2,3,2,3]
values=['apple','book','pen','soccer','paper','tennis']

d = defaultdict(list)
for k, v in zip(keys, values):
    d[k].append(v)

【讨论】:

    【解决方案2】:

    看起来您想要的是从一个键到多个值的映射,实现它的一种方法是:

    from collections import defaultdict
    
    d = defaultdict(list)
    
    keys=[1,2,2,3,2,3]
    values=['apple','book','pen','soccer','paper','tennis']
    
    for tuple in zip(keys, values):
        d[tuple[0]].append(tuple[1])
    
    print(d)  # defaultdict(<class 'list'>, {1: ['apple'], 2: ['book', 'pen', 'paper'], 3: ['soccer', 'tennis']})
    

    【讨论】:

      【解决方案3】:

      你可以使用itertools:

      import itertools
      keys=[1,2,2,3,2,3]
      values=['apple','book','pen','soccer','paper','tennis']
      final_data = {a:[i[0] for i in b] for a, b in [(a, list(b)) for a, b in itertools.groupby(sorted(zip(values, keys), key=lambda x:x[-1]), key=lambda x:x[-1])]}
      

      输出:

      {1: ['apple'], 2: ['book', 'pen', 'paper'], 3: ['soccer', 'tennis']}
      

      【讨论】:

        【解决方案4】:

        纯python也可以

        keys=[1,2,2,3,2,3]
        values=['apple','book','pen','soccer','paper','tennis']
        
        d = dict(zip(keys, [[] for _ in keys]))  # dict w keys, empty lists as values
        
        for k, v in zip(keys, values):
            d[k].append(v)
        
        d
        Out[128]: {1: ['apple'], 2: ['book', 'pen', 'paper'], 3: ['soccer', 'tennis']}
        

        【讨论】:

          【解决方案5】:

          两种方法:

          如果你愿意,你可以使用已经建议的默认字典:

          数据是:

          keys=[1,2,2,3,2,3]
          values=['apple','book','pen','soccer','paper','tennis']
          

          方法:1

          import collections
          
          
          d=collections.defaultdict(list)
          
          for i in zip(keys,values):
              d[i[0]].append(i[1])
          
          print(d)
          

          输出:

          {1: ['apple'], 2: ['book', 'pen', 'paper'], 3: ['soccer', 'tennis']}
          

          或者如果您想开发自己的逻辑而不导入任何外部模块,那么您可以尝试:

          result={}
          for i in zip(keys,values):
              if i[0] not in result:
                  result[i[0]]=[i[1]]
              else:
                  result[i[0]].append(i[1])
          
          print(result)
          

          输出:

          {1: ['apple'], 2: ['book', 'pen', 'paper'], 3: ['soccer', 'tennis']}
          

          【讨论】:

          • for k, v in zip(keys, values): 对我来说更具可读性,当可以使用提示性标签时,嵌套索引很难看:result[k]=[v]
          猜你喜欢
          • 2019-04-18
          • 2013-06-17
          • 2016-04-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-08-17
          • 1970-01-01
          相关资源
          最近更新 更多