【问题标题】:How do I zip keys with individual values in my lists in python?如何在 python 的列表中压缩带有单个值的键?
【发布时间】:2012-11-08 22:09:26
【问题描述】:

我正在导入一个矩阵,将第一行转换为键,并将其余行转换为值。我想用每个值压缩键并将它们放入字典中。

例如:

如果我有以下情况:

k = ['a', 'b']
v = [[1,2], [3,4]]

我想获取 v 中的每个值(对于 v 中的 x)并压缩它们(k 和 x),然后转换为字典。

然后我将字典添加到字典列表中。

最后我应该有:

dicts = [{'a':1, 'b':2}, {'a':3, 'b':4}]

现在,我只是用我的钥匙压缩我的行。我该如何解决这个问题?

matrix_filename = raw_input("Enter the matrix filename:  ")  
matrix = [i.strip().split() for i in open(matrix_filename).readlines()]  
keys = matrix[0]  
vals= (matrix[1:])  
N=len(vals)  

dicts = []  

for i in range(1,N):  
    for j in range(1,N):  
        vals[i-1][j-1] = int(matrix[i][j])  
        dicts = dict(zip(keys,vals))  

【问题讨论】:

    标签: python key dictionary


    【解决方案1】:
    >>> [dict(zip(k, x)) for x in v]
    [{'a': 1, 'b': 2}, {'a': 3, 'b': 4}]
    

    【讨论】:

    • +1 你只是在一行中得到它,是什么让我使用了嵌套的 for 循环。 :(
    • 一旦您了解了您的工具,您是否不喜欢在 Python 中使用它是多么容易?
    【解决方案2】:

    使用itertools.cycle():

    In [51]: from itertools import *
    
    In [52]: cyc=cycle(k)
    
    In [53]: [{next(cyc):y for y in x} for x in v]
    Out[53]: [{'a': 1, 'b': 2}, {'a': 3, 'b': 4}]
    

    【讨论】:

      【解决方案3】:

      我根据另一个问题的answers 开发了一个基于生成器的解决方案。

      (重复答案:https://stackoverflow.com/a/69578838/11121534

      当字典很大时,这可能会有所帮助。

      def zip_dict(d):
          for vals in zip(*(d.values())):
              yield dict(zip(d.keys(), vals))
      

      示例用法:

      d = dict(
          x=[1,3,5,7,9],
          y=[2,4,6,8,10]
      )
      
      for t in zip_dict(d):
          print(t)
      

      结果是:

      {'x': 1, 'y': 2}
      {'x': 3, 'y': 4}
      {'x': 5, 'y': 6}
      {'x': 7, 'y': 8}
      {'x': 9, 'y': 10}
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-11-20
        • 1970-01-01
        • 2023-02-23
        • 2013-11-09
        • 1970-01-01
        • 1970-01-01
        • 2020-11-21
        • 1970-01-01
        相关资源
        最近更新 更多