Hướng dẫn python dictionary tree - cây từ điển trăn

Tôi có một từ điển Python và tôi muốn tạo ra một cây từ nó. Từ điển là một cái gì đó như thế này:

Nội phân Chính showShow

  • Tìm hiểu về cây và cách thực hiện chúng.
  • Mà không cần chỉ định
  • Làm thế nào để bạn tạo một danh sách cây trong Python?
  • Có phải cây là một từ điển trong Python?
  • Bạn có thể biến một từ điển thành một python danh sách không?
  • Bạn có thể biến một từ điển thành một chuỗi không?

dict_={"2":{'parent': "1"},"1":{'parent': None},"3":{'parent': "2"}}

Trong trường hợp này, gốc là "1"

Tôi đã cố gắng sử dụng thư viện Treelib nhưng vấn đề khi tôi lặp lại từ điển và tạo một nút, cha mẹ của nó vẫn chưa được tạo. Ví dụ: nếu tôi muốn tạo một nút cho "2", cha mẹ của nó ("1") vẫn chưa được tạo, vì vậy không thể làm được. Bất kỳ ý tưởng?

Hỏi ngày 23 tháng 12 năm 2018 lúc 14:03Dec 23, 2018 at 14:03

1

Bạn có thể làm như sau, sử dụng Treelib:

from treelib import Node, Tree

dict_ = {"2": {'parent': "1"}, "1": {'parent': None}, "3": {'parent': "2"}}

added = set()
tree = Tree()
while dict_:

    for key, value in dict_.items():
        if value['parent'] in added:
            tree.create_node(key, key, parent=value['parent'])
            added.add(key)
            dict_.pop(key)
            break
        elif value['parent'] is None:
            tree.create_node(key, key)
            added.add(key)
            dict_.pop(key)
            break

tree.show()

Đầu ra

1
└── 2
    └── 3

Ý tưởng là chỉ thêm một nút nếu cha mẹ có mặt trong cây hoặc cha mẹ là

from treelib import Node, Tree

dict_ = {"2": {'parent': "1"}, "1": {'parent': None}, "3": {'parent': "2"}}

added = set()
tree = Tree()
while dict_:

    for key, value in dict_.items():
        if value['parent'] in added:
            tree.create_node(key, key, parent=value['parent'])
            added.add(key)
            dict_.pop(key)
            break
        elif value['parent'] is None:
            tree.create_node(key, key)
            added.add(key)
            dict_.pop(key)
            break

tree.show()
5. Khi cha mẹ là
from treelib import Node, Tree

dict_ = {"2": {'parent': "1"}, "1": {'parent': None}, "3": {'parent': "2"}}

added = set()
tree = Tree()
while dict_:

    for key, value in dict_.items():
        if value['parent'] in added:
            tree.create_node(key, key, parent=value['parent'])
            added.add(key)
            dict_.pop(key)
            break
        elif value['parent'] is None:
            tree.create_node(key, key)
            added.add(key)
            dict_.pop(key)
            break

tree.show()
5 thêm nó dưới dạng gốc.

Đã trả lời ngày 23 tháng 12 năm 2018 lúc 14:15Dec 23, 2018 at 14:15

Hướng dẫn python dictionary tree - cây từ điển trăn

Dani Mesejodani MesejoDani Mesejo

58.5K6 Huy hiệu vàng45 Huy hiệu bạc68 Huy hiệu Đồng6 gold badges45 silver badges68 bronze badges

Bạn có thể làm như sau. Đầu tiên, chuyển đổi cấu trúc dữ liệu thành ánh xạ của cha mẹ con:

from collections import defaultdict

d = defaultdict(list)  # parent: List[children]
for k, v in dict_.items():
    d[v['parent']].append(k)

Sau đó, bắt đầu với gốc

root = d[None][0]

tree = Tree()
tree.create_node(root, root)

Tạo cây từ trên cùng:

agenda, seen = [root], set([root])
while agenda:
    nxt = agenda.pop()
    for child in d[nxt]:
        tree.create_node(child, child, parent=nxt)
        if child not in seen:
            agenda.append(child)
            seen.add(child)

Đã trả lời ngày 23 tháng 12 năm 2018 lúc 14:19Dec 23, 2018 at 14:19

user2390182user2390182user2390182

68.6K6 Huy hiệu vàng60 Huy hiệu bạc82 Huy hiệu đồng6 gold badges60 silver badges82 bronze badges

Tìm hiểu về cây và cách thực hiện chúng.

Rễ

Một cây như một cấu trúc dữ liệu có thể nhanh chóng trở thành một môn toán học phức tạp (kiểm tra wiki), chúng ta được bao quanh bởi những thứ thực và ảo (thực sự dữ liệu) có thể được mô hình hóa và biểu diễn bởi một cây Hiểu ngay cả ở cấp độ cơ bản.

Sử dụng DefaultDict tích hợp của Python, chúng tôi có thể dễ dàng xác định cấu trúc dữ liệu cây:

def tree(): return defaultdict(tree)

Đó là nó!

Nó chỉ đơn giản nói rằng một cây là một dict có giá trị mặc định là cây.

(Nếu bạn đang theo dõi ở nhà, hãy đảm bảo

from treelib import Node, Tree

dict_ = {"2": {'parent': "1"}, "1": {'parent': None}, "3": {'parent': "2"}}

added = set()
tree = Tree()
while dict_:

    for key, value in dict_.items():
        if value['parent'] in added:
            tree.create_node(key, key, parent=value['parent'])
            added.add(key)
            dict_.pop(key)
            break
        elif value['parent'] is None:
            tree.create_node(key, key)
            added.add(key)
            dict_.pop(key)
            break

tree.show()
7)

.

Ví dụ

JSON-esque

Bây giờ chúng ta có thể tạo ra các từ điển lồng nhau của JSON-esque mà không cần tạo ra các từ điển phụ, họ đã tồn tại một cách kỳ diệu khi chúng ta tham khảo chúng:

users = tree()
users['harold']['username'] = 'hrldcpr'
users['handler']['username'] = 'matthandlersux'

Chúng tôi có thể in cái này dưới dạng JSON với

from treelib import Node, Tree

dict_ = {"2": {'parent': "1"}, "1": {'parent': None}, "3": {'parent': "2"}}

added = set()
tree = Tree()
while dict_:

    for key, value in dict_.items():
        if value['parent'] in added:
            tree.create_node(key, key, parent=value['parent'])
            added.add(key)
            dict_.pop(key)
            break
        elif value['parent'] is None:
            tree.create_node(key, key)
            added.add(key)
            dict_.pop(key)
            break

tree.show()
8 và chúng tôi nhận được dự kiến:

{"harold": {"username": "hrldcpr"}, "handler": {"username": "matthandlersux"}}

Mà không cần chỉ định

Chúng ta thậm chí có thể tạo cấu trúc mà không có bài tập nào cả, vì chỉ tham khảo một mục nhập tạo ra nó:

taxonomy = tree()
taxonomy['Animalia']['Chordata']['Mammalia']['Carnivora']['Felidae']['Felis']['cat']
taxonomy['Animalia']['Chordata']['Mammalia']['Carnivora']['Felidae']['Panthera']['lion']
taxonomy['Animalia']['Chordata']['Mammalia']['Carnivora']['Canidae']['Canis']['dog']
taxonomy['Animalia']['Chordata']['Mammalia']['Carnivora']['Canidae']['Canis']['coyote']
taxonomy['Plantae']['Solanales']['Solanaceae']['Solanum']['tomato']
taxonomy['Plantae']['Solanales']['Solanaceae']['Solanum']['potato']
taxonomy['Plantae']['Solanales']['Convolvulaceae']['Ipomoea']['sweet potato']

Lần này chúng tôi sẽ yêu cầu chúng tôi chuyển đổi sang tiêu chuẩn trước tiên:

from treelib import Node, Tree

dict_ = {"2": {'parent': "1"}, "1": {'parent': None}, "3": {'parent': "2"}}

added = set()
tree = Tree()
while dict_:

    for key, value in dict_.items():
        if value['parent'] in added:
            tree.create_node(key, key, parent=value['parent'])
            added.add(key)
            dict_.pop(key)
            break
        elif value['parent'] is None:
            tree.create_node(key, key)
            added.add(key)
            dict_.pop(key)
            break

tree.show()
0

Bây giờ chúng ta có thể tạo ra cấu trúc với

from treelib import Node, Tree

dict_ = {"2": {'parent': "1"}, "1": {'parent': None}, "3": {'parent': "2"}}

added = set()
tree = Tree()
while dict_:

    for key, value in dict_.items():
        if value['parent'] in added:
            tree.create_node(key, key, parent=value['parent'])
            added.add(key)
            dict_.pop(key)
            break
        elif value['parent'] is None:
            tree.create_node(key, key)
            added.add(key)
            dict_.pop(key)
            break

tree.show()
9:

from treelib import Node, Tree

dict_ = {"2": {'parent': "1"}, "1": {'parent': None}, "3": {'parent': "2"}}

added = set()
tree = Tree()
while dict_:

    for key, value in dict_.items():
        if value['parent'] in added:
            tree.create_node(key, key, parent=value['parent'])
            added.add(key)
            dict_.pop(key)
            break
        elif value['parent'] is None:
            tree.create_node(key, key)
            added.add(key)
            dict_.pop(key)
            break

tree.show()
1

Vì vậy, các cấu trúc cơ sở mà chúng tôi tham khảo bây giờ tồn tại như các dicts, với các dicts trống ở lá.

Lặp đi lặp lại

Cây này có thể thú vị khi lặp đi bộ, một lần nữa bởi vì cấu trúc ra đời đơn giản bằng cách đề cập đến nó.

Ví dụ: giả sử chúng ta đang phân tích danh sách các động vật mới để thêm vào phân loại của chúng ta ở trên, vì vậy chúng ta muốn gọi một chức năng như:

from treelib import Node, Tree

dict_ = {"2": {'parent': "1"}, "1": {'parent': None}, "3": {'parent': "2"}}

added = set()
tree = Tree()
while dict_:

    for key, value in dict_.items():
        if value['parent'] in added:
            tree.create_node(key, key, parent=value['parent'])
            added.add(key)
            dict_.pop(key)
            break
        elif value['parent'] is None:
            tree.create_node(key, key)
            added.add(key)
            dict_.pop(key)
            break

tree.show()
2

Chúng ta có thể thực hiện điều này đơn giản như:

from treelib import Node, Tree

dict_ = {"2": {'parent': "1"}, "1": {'parent': None}, "3": {'parent': "2"}}

added = set()
tree = Tree()
while dict_:

    for key, value in dict_.items():
        if value['parent'] in added:
            tree.create_node(key, key, parent=value['parent'])
            added.add(key)
            dict_.pop(key)
            break
        elif value['parent'] is None:
            tree.create_node(key, key)
            added.add(key)
            dict_.pop(key)
            break

tree.show()
3

Một lần nữa, chúng tôi không bao giờ gán cho từ điển, nhưng chỉ bằng cách tham chiếu các khóa chúng tôi đã tạo ra cấu trúc mới của mình:

from treelib import Node, Tree

dict_ = {"2": {'parent': "1"}, "1": {'parent': None}, "3": {'parent': "2"}}

added = set()
tree = Tree()
while dict_:

    for key, value in dict_.items():
        if value['parent'] in added:
            tree.create_node(key, key, parent=value['parent'])
            added.add(key)
            dict_.pop(key)
            break
        elif value['parent'] is None:
            tree.create_node(key, key)
            added.add(key)
            dict_.pop(key)
            break

tree.show()
4

Sự kết luận

Điều này có lẽ không hữu ích lắm và nó tạo ra một số mã bối rối (xem

1
└── 2
    └── 3
0 ở trên).

Nhưng nếu bạn thích Python thì tôi hy vọng điều này thật thú vị khi nghĩ về hoặc đáng để hiểu.

Có một cuộc thảo luận tốt về ý chính này trên tin tức tin tức.

Làm thế nào để bạn tạo một danh sách cây trong Python?

Đưa ra một danh sách các danh sách, hãy viết một chương trình Python để chuyển đổi danh sách danh sách đã cho thành một từ điển giống như cây ...

Examples:.

Phương pháp số 1: Phương pháp ngây thơ. Đây là một cách tiếp cận ngây thơ trong đó chúng tôi sử dụng hai vòng cho các vòng lặp để vượt qua danh sách danh sách. ....

Phương pháp số 2: Sử dụng giảm ().

Có phải cây là một từ điển trong Python?

Vì Python không thực hiện cây cho chúng tôi, chúng tôi sẽ xác định chúng bằng cách sử dụng từ điển. Mỗi nút của cây sẽ là một từ điển có hai phím. Phím đầu tiên là chuỗi "giá trị", ánh xạ tới giá trị trong nút.. Each node of the tree will be a dictionary that has two keys. The first key is the string "value", which maps to the value in the node.

Bạn có thể biến một từ điển thành một python danh sách không?

Bạn có thể biến một từ điển thành một chuỗi không?The items() method basically converts a dictionary to a list along with that we can also use the list() function to get a list of tuples/pairs.

Bạn có thể biến một từ điển thành một chuỗi không?

Trong trường hợp này, gốc là "1". This method can be used if the dictionary's length is not too big. The str() method of Python is used to convert a dictionary to its string representation.