我有一个这样的词典列表:
l = [{'pet': 'cat', 'price': '39.99', 'available': 'True'},
{'pet': 'cat', 'price': '67.99', 'available': 'True'},
{'pet': 'dog', 'price': '67.00', 'available': 'False'}
,....,
{'pet': 'fish', 'price': '11.28', 'available': 'True'}]
如何将上述列表转换为? (*)
:
l_2 = [('cat','39.99','True'),('cat','67.99','True'),('dog','67.00','False'),....,('fish','11.28','True')]
我尝试使用.items()
和l[1]
:
for l in new_list:
new_lis.append(l.items())
但是,我无法将字典列表的第二个元素位置提取到元组列表中,如(*)
答案 0 :(得分:5)
选项1
使用map
(短而甜,但速度慢):
l_2 = list(map(lambda x: tuple(x.values()), l))
在lambda
函数中,指定您希望从dict
值中创建元组。这也可以使用vanilla函数加速,而不是lambda
:
def foo(x):
return tuple(x.values())
l_2 = list(map(foo, l))
print(l_2)
[
('39.99', 'cat', 'True'),
('67.99', 'cat', 'True'),
('67.00', 'dog', 'False'),
('11.28', 'fish', 'True')
]
选项2
使用列表理解。另一个答案已经为此提供了解决方案。
或者,作为对现有解决方案的修复,您只需将.items()
替换为.values()
:
new_list = []
for x in l:
new_list.append(tuple(x.values()))
print(new_list)
[
('39.99', 'cat', 'True'),
('67.99', 'cat', 'True'),
('67.00', 'dog', 'False'),
('11.28', 'fish', 'True')
]
请注意,在所有这些解决方案中,没有保证生成的元组的顺序。
计时
Solution 1 (improved): 100000 loops, best of 3: 2.47 µs per loop
Solution 2: 1000000 loops, best of 3: 1.79 µs per loop
Your solution: 100000 loops, best of 3: 2.03 µs per loop
答案 1 :(得分:4)
您需要的是.values()
而不是.items()
,例如(使用list-comprehension
):
l_2 = [tuple(x.values()) for x in l]
输出:
[('cat', 'True', '39.99'), ('cat', 'True', '67.99'), ('dog', 'False', '67.00'), ('fish', 'True', '11.28')]