我怎样才能安排字典?

时间:2016-03-29 19:29:31

标签: python

我很难按照以下方式安排字典,输入中的给定数字为5,然后在字典中搜索key=5将其放在第一个然后是第一个值4并在字典中搜索key=4并将其值设为第二个,然后将5的第二个值设为3并搜索key=3 in字典并将其值作为第三个

值将是一个或两个整数

我正在绘制一个二叉树,所以如果这里的5个根节点(父节点)是第一个,然后它的子节点,子节点等接下来会更容易

我尝试使用OrderedDict进行排列,但我找不到它

是的,有人能帮帮我吗?

输入:

{8: [9], 3: [6, 8], 4: [2, 1], 5: [4, 3], 6: [0, 7]}

输出:

{5: [4, 3], 4: [2, 1], 3: [6, 8], 6: [0, 7], 8: [9]} 

更新代码:

def dfs(cur, prev, edges, res):
    for next in edges[cur]:
        if next == prev: continue

        res.setdefault(cur, []).append(next)

        dfs(next, cur, edges, res)


def construct_tree(edges, root):
    d = {}
    x = []
    for edge in edges:
        u, v = edge
        d.setdefault(u, []).append(v)
        d.setdefault(v, []).append(u)

    res = {}

    dfs(root, -1, d, res)

    return res

if __name__ == '__main__':

        root_node = 5
        edges = [[2, 4], [4, 1], [0, 6], [7, 6], [8, 9], [4, 5], [6, 3], [3, 5], [3, 8]]
        print((construct_tree(edges, root_node)))

2 个答案:

答案 0 :(得分:3)

这是一个有趣的问题,因为它比你想象的要复杂得多。这会深入探索路径,因此深度优先和广度优先搜索等内容非常重要。

从您的示例进/出,看起来您需要广度优先搜索,因此我们需要一个队列来解决问题。当然,您还需要一个OrderedDict来放置您找到并填充它们的节点以及您的样本数据。

from collections import OrderedDict
from queue import Queue

sample_dict = {8: [9], 3: [6, 8], 4: [2, 1], 5: [4, 3], 6: [0, 7]}

你从某个地方获得了第一个节点,所以只需要调用该函数的一个参数,然后抓取该键值的每个项目,然后将其添加到队列中,然后推送队列直到完成!

def sort_the_dict(in_, firstkey):
    # in_ is your sample data.
    result_dict = OrderedDict()
    q = Queue()
    q.put_nowait(firstkey)

    while not q.empty():
        k = q.get_nowait():
        v = in_.get(k)
        if v is not None:
            # if a value exists for that key
            result_dict[k] = v
            for vv in v:
                q.put_nowait(vv)

    return result_dict

答案 1 :(得分:2)

from collections import OrderedDict

d = {8: [9], 3: [6, 8], 4: [2, 1], 5: [4, 3], 6: [0, 7]}

sorted_keys = sorted([x for x in d])
sorted_d = OrderedDict(zip(sorted_keys, [d[k] for k in sorted_keys]))

不是按数字排序,而是可以替换sorted_keys,但是要对dict进行排序。这就是你如何能够完成你所要求的,但我会回应其他评论,并说可能有更好的方法去做你想做的事情。