映射多个列表以在python中创建(键,值)对[关闭]
Posted
技术标签:
【中文标题】映射多个列表以在python中创建(键,值)对[关闭]【英文标题】:Mapping multiple lists to create (key, value) pairs in python [closed] 【发布时间】:2017-11-09 14:56:03 【问题描述】:key = ["id","name","sal"]
id = [1,2,3,4]
info = [["John",1000], ["Joel",5000], ["Tom",2000],["Ray",1000]]
在python(字典列表)中生成以下输出的最简单方法是什么?
[id=1,name="John",sal=1000,
id=2,name="Joel",sal=5000,
id=3,name="Tom",sal=2000,
id=4,name="Ray",sal=1000]
【问题讨论】:
【参考方案1】:你可以使用zip
:
key_list = ['name','id']
name_list = ['John', 'Tom', 'David','Joel','Liza']
id_list = [1,2,3,4,5]
final_data = [key_list[0]:a, key_list[1]:b for a, b in zip(name_list, id_list)]
输出:
['name': 'John', 'id': 1, 'name': 'Tom', 'id': 2, 'name': 'David', 'id': 3, 'name': 'Joel', 'id': 4, 'name': 'Liza', 'id': 5]
【讨论】:
为了在此问题中使用python 2.7
获得更好的性能,您应该使用itertools.izip
。
你可以再次使用zip
来缩短它(稍微):[dict(zip(key_list, v)) for v in zip(name_list, id_list)]
。
@DanhPham 如果name_list
和id_list
已经是完全实例化的列表,使用itertools
只会增加开销。 itertools
中的函数是为了提高内存效率。
@chepner 你不需要在这种情况下构建的项目的完整列表,你只需要一个迭代。 izip
对于节省内存很有用。我遵循这个问题的答案:When is it better to use zip instead of izip?【参考方案2】:
您可以zip
name 和 id 列表,然后使用密钥列表再次压缩这些元组。
>>> [dict(zip(key_list, pair)) for pair in zip(name_list, id_list)]
['name': 'John', 'id': 1,
'name': 'Tom', 'id': 2,
'name': 'David', 'id': 3,
'name': 'Joel', 'id': 4,
'name': 'Liza', 'id': 5]
这也适用于任意数量的键和属性列表。
>>> attributes = [name_list, id_list] # and maybe more
>>> [dict(zip(key_list, pair)) for pair in zip(*attributes)]
【讨论】:
【参考方案3】:我认为我的解决方案是根据输出格式
['='.format(key_list[0],a),'='.format(key_list[1],b) for a, b in zip(name_list, id_list)]
输出
['id=1', 'name=John',
'id=2', 'name=Tom',
'id=3', 'name=David',
'id=4', 'name=Joel',
'id=5', 'name=Liza']
【讨论】:
您正在创建一个set
字符串,而不是字典。
@tobias_k 因此必须更改输出格式
不确定你的意思。更改格式字符串不会一下子使它成为字典。您必须使用 key_list[9]: a, ...
或类似名称才能使其成为 dict 理解。【参考方案4】:
您可以使用zip
并结合名称和ID 列表,然后使用密钥列表再次压缩这些元组。这应该可以满足您的要求,
key_list = ['name', 'id']
name_list = ['John', 'Tom', 'David', 'Joel', 'Liza']
id_list = [1, 2, 3, 4, 5]
data = [dict(zip(key_list, (a,b))) for a,b in zip(name_list, id_list)]
输出应该是这样的,
['name': 'John', 'id': 1, 'name': 'Tom', 'id': 2, 'name': 'David', 'id': 3, 'name': 'Joel', 'id': 4, 'name': 'Liza', 'id': 5]
【讨论】:
以上是关于映射多个列表以在python中创建(键,值)对[关闭]的主要内容,如果未能解决你的问题,请参考以下文章
反转 MultiLabelBinarizer 以在列中创建列表
React - 通过对象数组映射以在 Material UI 中创建日期文本字段