假设我有两本这样的字典。在
a = {'file1': [('1.txt', 1.0),
('3.txt', 0.4),
('2.txt', 0.3)],
'file2': [('1.txt', 0.5),
('2.txt', 0.2),
('3.txt', 1.0)]}
b = {'file1': [('1.txt', 9),
('2.txt', 1),
('3.txt', 5),
('4.txt', 4)],
'file2': [('1.txt', 0),
('2.txt', 2),
('3.txt', 3),
('4.txt', 0)]}
我编写了一个函数来根据字典a过滤字典b
函数的预期结果如下:
^{pr2}$到目前为止,我已经编写了一个函数,但它的输出不是我想要的那个。在
def filter():
c = {file1:set((txt1,value2)
for file1,dic1 in a.items()
for file2,dic2 in b.items()
for txt1,value1 in dic1
for txt2,value2 in dic2
if txt1 == txt2 and file1 == file2)
for file1,dic1 in a.items()}
pp({k:v for k,v in c.items()})
现在输出如下所示:
{'file1': {('1.txt', 0),
('1.txt', 9),
('2.txt', 1),
('2.txt', 2),
('3.txt', 3),
('3.txt', 5)},
'file2': {('1.txt', 0),
('1.txt', 9),
('2.txt', 1),
('2.txt', 2),
('3.txt', 3),
('3.txt', 5)}}
我不知道哪里出了问题。 任何帮助都将不胜感激。在
我也是一个新手,我的答案没有以前那么好,但是因为我花了一些时间来解决这个问题:)我的代码是
如果只希望在具有不常用键的地方保留具有公共值的公共键:
如果您有不常用的键,并且还希望保留这些键和值:
^{pr2}$如果您想实际过滤原始dict:
或者使用dict comp创建一个新dict,如果所有键都是公共的:
最原始的dict过滤将是最有效的。在
您可以将^{} 用于以下任务:
注意为了检查a中是否存在
b
值,可以使用zip函数获取文件名!在另外,您还可以使用dict.setdefault() method:
^{pr2}$注意:如果您使用python3作为
zip
函数返回一个生成器,则无法对其进行索引,因此需要将zip(*a[k])[0]:
更改为next(zip(*a[k])):
相关问题 更多 >
编程相关推荐