gpt4 book ai didi

python - 从匹配长度列表的字典中迭代字典

转载 作者:太空宇宙 更新时间:2023-11-03 18:48:01 25 4
gpt4 key购买 nike

我有这样的结构:

d = {
"a": [1, 2, 3],
"b": [4, 5, 6],
"c": [7, 8, 9],
}

保证列表的长度匹配。我想要一个可以进行 for 循环的迭代器,它将为列表中的每一列提供一个字典,有点像每次将 zip 返回到带有原始键名称的字典,如下所示:

>>> for i in iDictOfListsToDicts(d):
... print i
{"a": 1, "b": 4, "c": 7}
{"a": 2, "b": 5, "c": 8}
{"a": 3, "b": 6, "c": 9}

我确信我可以破解生成器函数中的某些内容,但我觉得我错过了可能是两件事的紧密小组合,也许来自集合和/或 itertools。如果可能的话,我希望有良好的效率和可读性。

我一直在玩弄这样开始的事情:

map(iter, d.values())

显然,这只是给了我一个没有相关键的值迭代器列表,但我仍然无法循环遍历该列表并获得我想要的内容。

最佳答案

使用zip或使用map:

>>> zip([1,2,3], [4,5,6], [7,8,9])
[(1, 4, 7), (2, 5, 8), (3, 6, 9)]
>>> map(None, [1,2,3], [4,5,6], [7,8,9])
[(1, 4, 7), (2, 5, 8), (3, 6, 9)]

尝试以下操作:

def iDictOfListsToDicts(d):
keys = list(d)
for vs in zip(*d.values()):
yield dict(zip(keys, vs))

示例:

>>> d = {
... "a": [1, 2, 3],
... "b": [4, 5, 6],
... "c": [7, 8, 9],
... }
>>> for i in iDictOfListsToDicts(d):
... print i
...
{'a': 1, 'c': 7, 'b': 4}
{'a': 2, 'c': 8, 'b': 5}
{'a': 3, 'c': 9, 'b': 6}

关于python - 从匹配长度列表的字典中迭代字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19046243/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com