统一python dicts?

2024-05-17 06:33:35 发布

您现在位置:Python中文网/ 问答频道 /正文

没有人有一个公平的算法来统一(几乎)任意的dict吗?也就是说,根据格言

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}}
}

我一直想要一个通用的解决方案。我每年都会搜索几次通用的解决方案,却找不到一个(不,Google,unify from unification和unify from union不是一个词!),我一直推迟自己写一本。我很清楚编程Prolog会导致对生活的一种奇怪的看法,但是,嘿,一个人怎么可能有一个递归的dict/键/值存储而没有统一呢?你知道吗

在过去,我需要排序,因此需要列表,而在那时,我不再使用通用版本,而是使用硬编码。这一次,我实际上根本不需要集合/列表的统一,而退后一步是再次硬编码,因为我知道可以提前编写哪些键。但是:如果已经有了一个通用的解决方案,我就不必一次又一次地重新发明轮子了。这样做是不对的。你知道吗

真正的pythonic解决方案可能会从一个__unify__方法开始,对所有可以统一的东西,这是最基本的。你知道吗


Tags: from算法编码列表公平编程google解决方案
2条回答

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

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

正如评论所说的,请指定您面临的问题,而不是要求这样为您编写代码。你知道吗

就像十二生肖提到的,如果没有一个直接的问题,很难回答;但是,我会尝试一个解决方案。你知道吗

#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()]

告诉我这是怎么回事

相关问题 更多 >