aha*_*jib 20 python dictionary
我有两个词典,如:
dict1 = { (1,2) : 2, (2,3): 3, (1,3): 3}
dict2 = { (1,2) : 1, (1,3): 2}
Run Code Online (Sandbox Code Playgroud)
我想要的输出是两个字典中存在的项目的两个值列表:
[2,3]
[1,2]
Run Code Online (Sandbox Code Playgroud)
我现在正在做的是这样的:
list1 = []
list2 = []
for key in dict1.keys():
if key in dict2.keys():
list1.append(dict1.get(key))
list2.append(dict2.get(key))
Run Code Online (Sandbox Code Playgroud)
这段代码运行时间太长,这不是我期待的.我想知道是否有更有效的方法吗?
Bla*_*ear 28
commons = set(dict1).intersection(set(dict2))
list1 = [dict1[k] for k in commons]
list2 = [dict2[k] for k in commons]
Run Code Online (Sandbox Code Playgroud)
mgi*_*son 14
不要用dict.keys.在python2.x上,它每次调用时都会创建一个新列表(这是一个O(N)操作 - 平均来说list.__contains__是另一个O(N)操作).只是依赖于字典是可迭代容器的直接事实(使用O(1)查找):
list1 = []
list2 = []
for key in dict1:
if key in dict2:
list1.append(dict1.get(key))
list2.append(dict2.get(key))
Run Code Online (Sandbox Code Playgroud)
请注意,在python2.7上,您可以使用viewkeys直接获取交集:
>>> a = {'foo': 'bar', 'baz': 'qux'}
>>> b = {'foo': 'bar'}
>>> a.viewkeys() & b
set(['foo'])
Run Code Online (Sandbox Code Playgroud)
(在python3.x上,你可以keys在这里使用而不是viewkeys)
for key in dict1.viewkeys() & dict2:
list1.append(dict1[key]))
list2.append(dict2[key]))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2020 次 |
| 最近记录: |