我有一个由 dict
组成的 list
,需要将其转换为以空格分隔第一个变量的 namedtuple
(首选)或简单的 tuple
的 list
。
有更加Pythonic的方法吗?
我稍微简化了我的代码。欢迎使用推导式、生成器表达式和 itertools。
数据输入:
dl = [{'a': '1 2 3',
'd': '*',
'n': 'first'},
{'a': '4 5',
'd': '*', 'n':
'second'},
{'a': '6',
'd': '*',
'n': 'third'},
{'a': '7 8 9 10',
'd': '*',
'n': 'forth'}]
简单算法:
from collections import namedtuple
some = namedtuple('some', ['a', 'd', 'n'])
items = []
for m in dl:
a, d, n = m.values()
a = a.split()
items.append(some(a, d, n))
输出:
[some(a=['1', '2', '3'], d='*', n='first'),
some(a=['4', '5'], d='*', n='second'),
some(a=['6'], d='*', n='third'),
some(a=['7', '8', '9', '10'], d='*', n='forth')]
values()
没有特定的顺序!如果这个解决方案有效,并且a, d, n
确实按照那个顺序返回,那只是巧合。如果你使用不同版本的Python或以不同的方式创建字典,可能会出现问题。直接使用键,就像@eryksun的评论中所说的那样。 - Petr ViktorinOrderedDict
代替。 - scrapleshnamedtuple('xxx', d.keys())(**d)
非常方便。 - Alexander Oh