统一python dicts?

时间:2013-05-21 14:22:30

标签: python

一个人是否有一个公平的算法来统一(几乎)任意的词组?也就是说,给出了dicts

a = {1: 1, 2: 2, 3: [1,2,3]}
b = {4: 4, 3: [5], 5: {'a': 0, 'b': {}}
c = {3: [{'A': '0'}], 5: {'b': {'B': 1}}}

unify (a, b, c)

产量

{1: 1, 
 2: 2, 
 3: [1, 2, 3, 5, {'A': '0'}], 
 4: 4,     
 5: {'a': 0, 'b': {'B': 1}}
}

我一直想要一个通用的解决方案。我最终每年都会搜索一次通用的解决方案而没有找到一个(没有谷歌,统一统一并且从联合统一不是同一个词!),我一直在推迟写作一个人。我非常清楚编程Prolog会导致对生活的奇怪看法,但是嘿,怎么会有一个递归的dict / key / value-store而没有统一?

我过去需要订购,因此列表,然后我回到最后,我不打算使用通用版本,而是硬编码。这一次,我根本不需要统一集/列表,而后退则再次硬编码,因为我知道密钥可以提前。但是:如果那里已经有了一个通用的解决方案,我就不必一次又一次地重新发明轮子。必须这样做是错的。

真正的pythonic解决方案可能会以__unify__ - 方法开始,可以统一所有事情,它是基本的。

2 个答案:

答案 0 :(得分:0)

如果您对如何遍历字典感到困惑,请使用for循环遍历键:

>>> for i in {1: "abc"}: print i
1

正如评论所说,请说明您面临的问题,而不是要求SO为您编写代码。

答案 1 :(得分:0)

就像提到的生肖一样,很难回答直接问题;但是,我会尝试解决方案。

#Merge Lists of Dictionaries Functions
def merge_lists(l1, l2, key):
    merged = {}
    for item in l1+l2:
        if item[key] not in merged:
            merged[item[key]] = item
    return [val for (_, val) in merged.items()]

告诉我这是如何运作的