在python中的一定数量的字典中查找相同的ID

时间:2016-07-29 07:52:15

标签: python loops dictionary

我有一个程序循环遍历目录中可以找到的所有.xml。它搜索设备ID然后将它们全部添加到字典中(我认为)当我将它打印出来时它看起来像

{'1.xml': [], '2.xml': []}

接下来,我将从文件中获取的设备ID插入其中,以便输出如下:

{'1.xml': ['3', '12'], '2.xml': ['23', '3'']}

我想得到哪些设备ID是相同的,所以打印出来:

3

也许它甚至可以显示从哪些文件中获取信息,但这并不重要

2 个答案:

答案 0 :(得分:0)

在您澄清数据后

你可以编写循环或使用reduce,如果你在python 3上,你必须从functools导入。你可以使用lambda,例如: lambda s1,s2: s1 & s2但我更喜欢从operator模块导入适当的运算符。

In [1]: some_dict = {'1.xml': ['3', '12'], '2.xml': ['23', '3']}

In [2]: from functools import reduce

In [3]: from operator import and_

In [4]: reduce(and_,map(set, some_dict.values()))

Out[4]: {'3'}

等效的for-loop可以这样工作:

In [8]: it = iter(some_dict.values())

In [9]: intersection = set(next(it))

In [10]: for vals in it:
    ...:     intersection &= set(vals)
    ...:     

In [11]: intersection
Out[11]: {'3'}

答案 1 :(得分:0)

我正在考虑eval功能。如何将字典放入数组并动态生成代码。

例如:

list = [dict1]
list.append(dict2)  # append all dicts to the list

for i in range(len(list)):
    if i == len(list) - 1:
        string_code += "set(dict%d)" % (i+1)
    else:
        string_code += "set(dict%d) & " % (i+1)

difference = eval(string_code)

只是第一个想法......