[英]How to compare list values with dictionary keys and make a new dictionary of it using python
I have a list like this:我有一个这样的清单:
lis = ['Date', 'Product', 'Price']
I want to compare it with:我想将它与:
dict = {'Date' : '2013-05-01', 'Salary' : '$5000', 'Product' : 'Toys', 'Price' : '$10', 'Salesman' : 'Smith'}
I want to compare each item of list with keys of dictionary and make a new dictionary.我想将列表的每个项目与字典的键进行比较并制作一个新字典。
What I have tried is:我尝试过的是:
n = {}
for k,v in dict.items():
for i in lis:
if i==k:
n[k] = v
Output:输出:
n = {'Date' : '2013-05-01', 'Product' : 'Toys', 'Price' : '$10'}
This works but I want to do it through generators - can someone help me do that?这有效,但我想通过生成器来完成 - 有人可以帮我做吗?
Treat lis
as a set instead, so you can use dictionary views and an intersection:将
lis
视为一个集合,因此您可以使用字典视图和交集:
# python 2.7:
n = {k: d[k] for k in d.viewkeys() & set(lis)}
# python 3:
n = {k: d[k] for k in d.keys() & set(lis)}
Or you could use a simple dict comprehension with a in
test against d
:或者你可以使用一个简单的 dict 理解和 a
in
对d
测试:
# python 2.6 or older:
n = dict((k, d[k]) for k in lis if k in d)
# python 2.7 and up:
n = {k: d[k] for k in lis if k in d}
This presumes that not all values in lis
are going to be in d
;这假定并非
lis
中的所有值都将在d
; the if k in d
test can be dropped if they are always going to be present. if k in d
测试中的if k in d
始终存在,则可以删除它们。
For your specific case, the second form is quite a lot faster:对于您的具体情况,第二种形式要快得多:
>>> from timeit import timeit
>>> timeit("{k: d[k] for k in d.viewkeys() & s}", 'from __main__ import d, lis; s=set(lis)')
2.156520128250122
>>> timeit("{k: d[k] for k in lis if k in d}", 'from __main__ import d, lis')
0.9401540756225586
filtered_dict = dict((k, original_dict[k]) for k in lis if k in original_dict)
Or if you have 2.7+:或者,如果您有 2.7+:
filtered_dict = {k: original_dict[k] for k in lis if k in original_dict}
If you want to use a generator:如果要使用生成器:
item_generator = ((k, original_dict[k]) for k in lis if k in original_dict)
The generator will yield (key, value)
pairs.生成器将产生
(key, value)
对。
For Python 3.6对于 Python 3.6
dict_keys_list = list(dict.keys())
dict_keys_list.sort()
for key in dict_keys_list:
if key in lis:
print("Key is present")
Another approach where you want to compare a list of keys to be equal to the dictionary keys.您希望将键列表与字典键进行比较的另一种方法。
person = { 'name' : 'Don', 'nickname' : 'John', 'age' : 45, 'salary' : 50000, 'place' : 'Monaco, Europe' }
compare_list = ['nickname', 'place', 'name', 'salary', 'age']
person_keys_list = list(person.keys())
person_keys_list.sort()
compare_list.sort()
person_keys_list == compare_list # Gives you True
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.