我们如何将带有元组(键,值)的dict转换为列表 dicts,每个dict用键“key”和“value”?
例如:
dic={'Tim':3, 'Kate':2}
变为
lst = [{'Name':'Tim', 'Age':3}, {'Name':'Kate', 'Age':2}]
答案 0 :(得分:5)
您可以使用列表理解:
>>> dic={'Tim':3, 'Kate':2}
>>> [{'Name':i, 'Age':j} for i,j in dic.items()]
[{'Age': 3, 'Name': 'Tim'}, {'Age': 2, 'Name': 'Kate'}]
并反对:
>>> l=[{'Name':i, 'Age':j} for i,j in dic.items()]
>>> dict((i.values()[::-1] for i in l))
{'Tim': 3, 'Kate': 2}
答案 1 :(得分:4)
字典到字典列表
>>> dic={'Tim':3, 'Kate':2}
>>> [{"Name":i, "Age":j} for i,j in dic.items()]
[{'Age': 3, 'Name': 'Tim'}, {'Age': 2, 'Name': 'Kate'}]
>>>
最好使用字典数据结构,因为查找键的时间复杂度为O(1)
常数时间,即它不依赖于字典的大小
演示以找到凯特的年龄。
需要迭代List中的每个元素。时间复杂度从O(1)到O(N)
>>> info
[{'Age': 3, 'Name': 'Tim'}, {'Age': 2, 'Name': 'Kate'}]
>>> age = -1
>>> find_name = "Kate"
>>> for i in info:
... if i["Name"]==find_name:
... age = i["Age"]
... break
...
>>> age
2
>>>
按字典:时间复杂度为O(1)
>>> dic = {'Tim':3, 'Kate':2}
>>> find_name = "Kate"
>>> if find_name in dic:
... age = dic[find_name]
... else:
... age = -1
... print "No data for %s name"%find_name
...
>>> age
2
>>>
答案 2 :(得分:3)
使用map
>>> dic={'Tim':3, 'Kate':2}
>>> map(lambda x: x,dic)
['Tim', 'Kate']
>>> map(lambda x:{'Age':dic[x],'Name':x},dic)
[{'Age': 3, 'Name': 'Tim'}, {'Age': 2, 'Name': 'Kate'}]
>>>
注意 - map
与列表理解相比较慢,但我刚刚将其添加为替代