繁体   English   中英

从字典python创建列表列表

[英]Create a list of lists from a dictionary python

我有一个字典列表,我想将其转换为嵌套列表,该列表的第一个元素 (lst[0]) 包含字典键,列表的其余元素包含每个字典的值。

[{'id': '123',
  'name': 'bob',
  'city': 'LA'},
 {'id': '321',
  'name': 'sally',
  'city': 'manhattan'},
 {'id': '125',
  'name': 'fred',
  'city': 'miami'}]

我的预期输出结果是:

[['id','name','city'], ['123','bob','LA'],['321','sally','manhattan'],['125','fred','miami']]

有什么办法可以解决这个问题? 任何帮助将不胜感激。

您可以使用:

d = [{'id': '123',
  'name': 'bob',
  'city': 'LA'},
 {'id': '321',
  'name': 'sally',
  'city': 'manhattan'},
 {'id': '125',
  'name': 'fred',
  'city': 'miami'}]
[[k for k in d[0].keys()], *[list(i.values()) for i in d ]]

输出:

[['id', 'name', 'city'],
 ['123', 'bob', 'LA'],
 ['321', 'sally', 'manhattan'],
 ['125', 'fred', 'miami']]

首先,你会得到一个包含你的键的列表,然后得到一个包含每个内部dict的值的列表

>>> d = [{'id': '123',
  'name': 'bob',
  'city': 'LA'},
 {'id': '321',
  'name': 'sally',
  'city': 'manhattan'},
 {'id': '125',
  'name': 'fred',
  'city': 'miami'}]
>>> [list(x[0].keys())]+[list(i.values()) for i in d]
[['id', 'name', 'city'], ['123', 'bob', 'LA'], ['321', 'sally', 'manhattan'], ['125', 'fred', 'miami']]

严肃的建议:为了避免某些dict具有不同迭代顺序的可能性,将顺序基于第一个条目并使用operator.itemgetter有效地从所有条目中获得一致的顺序:

import operator

d = [{'id': '123',
  'name': 'bob',
  'city': 'LA'},
 {'id': '321',
  'name': 'sally',
  'city': 'manhattan'},
 {'id': '125',
  'name': 'fred',
  'city': 'miami'}]

keys = list(d[0])
keygetter = operator.itemgetter(*keys)
result = [keys, *[list(keygetter(x)) for x in d]]  # [keys, *map(list, map(keygetter, d))] might be a titch faster

如果可以接受tuple list ,这将更简单/更快:

keys = tuple(d[0])
keygetter = operator.itemgetter(*keys)
result = [keys, *map(keygetter, d)]

不严肃的建议:让csv为你

import csv
import io

dicts = [{'id': '123',
  'name': 'bob',
  'city': 'LA'},
 {'id': '321',
  'name': 'sally',
  'city': 'manhattan'},
 {'id': '125',
  'name': 'fred',
  'city': 'miami'}]

with io.StringIO() as sio:
    writer = csv.DictWriter(sio, dicts[0].keys())
    writer.writeheader()
    writer.writerows(dicts)
    sio.seek(0)
    result = list(csv.reader(sio))

在线试试吧!

这可以通过 for 循环和enumerate()内置方法来完成。

listOfDicts = [
    {"id": "123", "name": "bob", "city": "LA"},
    {"id": "321", "name": "sally", "city": "manhattan"},
    {"id": "125", "name": "fred", "city": "miami"},
]

results = []
for index, dic in enumerate(listOfDicts, start = 0):
    if index == 0:
        results.append(list(dic.keys()))
        results.append(list(dic.values()))
    else:
        results.append(list(dic.values()))

print(results)

输出:

[['id', 'name', 'city'], ['123', 'bob', 'LA'], ['321', 'sally', 'manhattan'], ['125', 'fred', 'miami']]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM