一个字典和一个dicts列表:转换和何时使用哪个

时间:2015-03-25 19:31:02

标签: python list dictionary

  1. 我们如何将带有元组(键,值)的dict转换为列表 dicts,每个dict用键“key”和“value”?

    例如:

    dic={'Tim':3, 'Kate':2}
    

    变为

    lst = [{'Name':'Tim', 'Age':3}, {'Name':'Kate', 'Age':2}]
    
  2. 使用每种产品有哪些优点和缺点 表示? (例如考虑我们能想到的操作 并自然地适用于他们)。感谢。

3 个答案:

答案 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与列表理解相比较慢,但我刚刚将其添加为替代