簡體   English   中英

以更優雅的方式打印循環字典

[英]Print circular dictionary in more elegant way

我正在閱讀 Jeol Grus 的“從零開始的數據科學”,這是我在大學學習數據結構課程 20 多年后的事。 對他編寫代碼的優雅方式着迷。 在第 1 章的示例中,我對將自己的字典附加到自身 - 'users' 的數據結構感興趣。 當我嘗試通過打印“用戶”的內容來了解它在字典中的工作原理時,它會打印出該字典的無限循環。 更神奇的是,Python 沒有錯誤。 但我仍然不知道內容是什么。

搜索了一些文章,在 Quora 上找到了一篇如何在 Python 中很好地打印嵌套字典? ,並了解內容。 雖然我開始考慮是否可以以更簡潔的樣式打印出內容,如下所示,使用指向字典的指針或類似的,而不是重復循環。 可能的?

{"id": 0, "name": "Hero", "friend": [*users[1], *users[2]] }
{"id": 1, "name": "Dunn", "friend": [*users[2], *users[3]] }

從零開始的數據科學示例

users = [
        { "id": 0, "name": "Hero"},
        { "id": 1, "name": "Dunn"},
        { "id": 2, "name": "Sue"},
        { "id": 3, "name": "Chi"},
        { "id": 4, "name": "Thor"},
        { "id": 5, "name": "Clive"},
        { "id": 6, "name": "Hicks"},
        { "id": 7, "name": "Devin"},
        { "id": 8, "name": "Kate"},
        { "id": 9, "name": "Klein"}
]
friendship = [(0,1), (0,2), (1,2), (1,3), (2,3), (3,4),
              (4,5), (5,6), (5,7), (6,8), (7,8), (8,9)]

for user in users :
    user["friends"] = []

for i, j in friendship :
    users[i]["friends"].append(users[j])
    users[j]["friends"].append(users[i])

def number_of_friends(user) :
    """ how many friends does _user_ have """
    return(len(user["friends"]))

total_connection = sum(number_of_friends(user)
                       for user in users)
num_users = len(users)
avg_connection = total_connection / num_users

# create a list (user_id, number_of_friends)
num_friends_by_id = [(user['id'], number_of_friends(user))
                      for user in users]

打印出

{'id': 0, 'name': 'Hero', 'friends': [{'id': 1, 'name': 'Dunn', 'friends': [{...}, {'id': 2, 'name': 'Sue', 'friends': [{...}, {...}, {'id': 3, 'name': 'Chi', 'friends': [{...}, {...}, {'id': 4, 'name': 'Thor', 'friends': [{...}, {'id': 5, 'name': 'Clive', 'friends': [{...}, {'id': 6, 'name': 'Hicks', 'friends': [{...}, {'id': 8, 'name': 'Kate', 'friends': [{...}, {'id': 7, 'name': 'Devin', 'friends': [{...}, {...}]}, {'id': 9, 'name': 'Klein', 'friends': [{...}]}]}]}, {'id': 7, 'name': 'Devin', 'friends': [{...}, {'id': 8, 'name': 'Kate', 'friends': [{'id': 6, 'name': 'Hicks', 'friends': [{...}, {...}]}, {...}, {'id': 9, 'name': 'Klein', 'friends': [{...}]}]}]}]}]}]}]}, {'id': 3, 'name': 'Chi', 'friends': [{...}, {'id': 2, 'name': 'Sue', 'friends': [{...}, {...}, {...}]}, {'id': 4, 'name': 'Thor', 'friends': [{...}, {'id': 5, 'name': 'Clive', 'friends': [{...}, {'id': 6, 'name': 'Hicks', 'friends': [{...}, {'id': 8, 'name': 'Kate', 'friends': [{...}, {'id': 7, 'name': 'Devin', 'friends': [{...}, {...}]}, {'id': 9, 'name': 'Klein', 'friends': [{...}]}]}]}, {'id': 7, 'name': 'Devin', 'friends': [{...}, {'id': 8, 'name': 'Kate', 'friends': [{'id': 6, 'name': 'Hicks', 'friends': [{...}, {...}]}, {...}, {'id': 9, 'name': 'Klein', 'friends': [{...}]}]}]}]}]}]}]}, {'id': 2, 'name': 'Sue', 'friends': [{...}, {'id': 1, 'name': 'Dunn', 'friends': [{...}, {...}, {'id': 3, 'name': 'Chi', 'friends': [{...}, {...}, {'id': 4, 'name': 'Thor', 'friends': [{...}, {'id': 5, 'name': 'Clive', 'friends': [{...}, {'id': 6, 'name': 'Hicks', 'friends': [{...}, {'id': 8, 'name': 'Kate', 'friends': [{...}, {'id': 7, 'name': 'Devin', 'friends': [{...}, {...}]}, {'id': 9, 'name': 'Klein', 'friends': [{...}]}]}]}, {'id': 7, 'name': 'Devin', 'friends': [{...}, {'id': 8, 'name': 'Kate', 'friends': [{'id': 6, 'name': 'Hicks', 'friends': [{...}, {...}]}, {...}, {'id': 9, 'name': 'Klein', 'friends': [{...}]}]}]}]}]}]}]}, {'id': 3, 'name': 'Chi', 'friends': [{'id': 1, 'name': 'Dunn', 'friends': [{...}, {...}, {...}]}, {...}, {'id': 4, 'name': 'Thor', 'friends': [{...}, {'id': 5, 'name': 'Clive', 'friends': [{...}, {'id': 6, 'name': 'Hicks', 'friends': [{...}, {'id': 8, 'name': 'Kate', 'friends': [{...}, {'id': 7, 'name': 'Devin', 'friends': [{...}, {...}]}, {'id': 9, 'name': 'Klein', 'friends': [{...}]}]}]}, {'id': 7, 'name': 'Devin', 'friends': [{...}, {'id': 8, 'name': 'Kate', 'friends': [{'id': 6, 'name': 'Hicks', 'friends': [{...}, {...}]}, {...}, {'id': 9, 'name': 'Klein', 'friends': [{...}]}]}]}]}]}]}]}]}

嘗試使用類而不是字典。

class Person:
    def __init__(self, id, name):
        self.id = id
        self.name = name
        self.friends = []

    def __str__(self):
        return "*users[" + str(id) + "]"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM