这是原始列表:
['name', 'value', 'name', 'value', 'name', 'value']
等等。 我需要将名称/值对提取到字典中:
{'name': 'value', 'name': 'value', 'name': 'value'}
有人可以详细说明最简单的方法吗?
这是原始列表:
['name', 'value', 'name', 'value', 'name', 'value']
等等。 我需要将名称/值对提取到字典中:
{'name': 'value', 'name': 'value', 'name': 'value'}
L
是您的原始列表,您可以使用zip(*[iter(L)]*2)
将项目分组成对。dict 构造函数 可以直接接受这样的一对迭代对象。>>> L = ['name1', 'value1', 'name2', 'value2', 'name3', 'value3']
>>> dict(zip(*[iter(L)]*2))
{'name1': 'value1', 'name2': 'value2', 'name3': 'value3'}
我不确定你所说的“更简单”是指什么(更容易理解?)。由于我不知道你的水平,很难猜测你认为什么更简单。以下是一种不使用iter
或zip
的方法。如果你还不知道enumerate
是什么,请查阅相关资料。
>>> d = {}
>>> for i, item in enumerate(L):
... if i % 2 == 0:
... key = item
... else:
... d[key] = item
...
>>> d
{'name1': 'value1', 'name2': 'value2', 'name3': 'value3'}
partition
。(旁注:在其他语言中,这被称为chunksOf或grouped。)
itertools文档建议使用以下函数:from itertools import zip_longest
def grouper(iterable, n, fillvalue=None):
"Collect data into fixed-length chunks or blocks"
# grouper('ABCDEFG', 3, 'x') --> ABC DEF Gxx"
args = [iter(iterable)] * n
return zip_longest(*args, fillvalue=fillvalue)
而zip文档提供了另一种实现相同效果的方法(在gnibbler的答案中给出):
def grouper(iterable, n):
return zip(*[iter(iterable)]*n)
>>> dict(grouper(range(8), 2))
{0: 1, 2: 3, 4: 5, 6: 7}
不是贬低任何人,我认为这可能更容易理解:
dict (zip (L[::2] , L[1::2] ))
>>> a = ['a', 'b', 'c', 'd', 'e', 'f']
>>> dict(zip([x for x in a[::2]], [x for x in a[1::2]]))
{'a': 'b', 'c': 'd', 'e': 'f'}
a[::2]
将获取从列表的 0
索引开始的所有第二个元素。
a[1::2]
将获取从列表的 1
索引开始的所有第二个元素。