python - itertools.izip() 用于未预定义的列表计数

标签 python python-itertools

我有以下数据结构:{'one':['a','b','c'],'two':['q','w','e'], '三':['t','u','y'],...}。因此,字典有不同的键数。由字典的键选择的每个数组都有相似的长度。如何将此结构转换为以下形式: [{'one':'a','two':'q','third':'t'},{'one':'b','two ':'w','三':'y'},...]

我认为我应该使用 itertools.izip(),但是如何在未预定义参数数量的情况下应用它?也许是这样的:itertools.izip([data[l] for l in data.keys()])?

TIA!

最佳答案

不太优雅,但确实有效:

In [9]: [{k:v[i] for (k,v) in d.items()} for i in range(len(d.values()[0]))]
Out[9]: 
[{'one': 'a', 'three': 't', 'two': 'q'},
 {'one': 'b', 'three': 'u', 'two': 'w'},
 {'one': 'c', 'three': 'y', 'two': 'e'}]

我不禁想到必须有一种更好的方式来表达 i 循环,但现在什么也没想到。

或者:

In [50]: map(dict, zip(*[[(k, v) for v in l] for k, l in d.items()]))
Out[50]: 
[{'one': 'a', 'three': 't', 'two': 'q'},
 {'one': 'b', 'three': 'u', 'two': 'w'},
 {'one': 'c', 'three': 'y', 'two': 'e'}]

不确定这是否在可读性方面有很大的改进。

关于python - itertools.izip() 用于未预定义的列表计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14507102/

相关文章:

python - 协程上的 itertools.tee?

python - itertools 库中的 tee 函数

python - pandas Dataframe 上的条件搜索

python - 如何访问另一个对象内部的对象的方法

python - Anaconda模块安装: Error: Could not find Binstar user netcdf

python - 预先检查 Django 管理复选框

python - 分页中的 Django 行号

python - 创建字符串的变体

Python 用字典格式填充字符串

Python 使用 itertools.product 创建列表?