首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >以更优雅的方式打印循环字典

以更优雅的方式打印循环字典
EN

Stack Overflow用户
提问于 2020-04-12 20:47:50
回答 1查看 50关注 0票数 0

我正在阅读Jeol Grus的"Data Science from Scratch“,这本书距离我的大学数据结构课程已经过去了20多年。他被他编写代码的优雅方式所吸引。在第一章的例子中,我感兴趣的是将自己的字典附加到自身的数据结构- 'users‘。当我试图通过打印'users‘的内容来理解它在字典中的工作方式时,它会打印出该字典的无限循环。更令人惊讶的是,Python没有错误。但我还是不知道内容是什么。

搜索了一些文章,在Quora How do I nicely print a nested dictionary in Python?上找到了一篇,并理解了其中的内容。尽管我开始思考是否可以像下面这样,用指向字典或类似的指针,而不是重复的循环,以更简洁的风格打印出内容。有可能吗?

代码语言:javascript
复制
{"id": 0, "name": "Hero", "friend": [*users[1], *users[2]] }
{"id": 1, "name": "Dunn", "friend": [*users[2], *users[3]] }

从零开始的数据科学示例

代码语言:javascript
复制
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]

打印输出

代码语言:javascript
复制
{'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': [{...}]}]}]}]}]}]}]}]}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-12 20:55:17

尝试使用类而不是字典。

代码语言:javascript
复制
class Person:
    def __init__(self, id, name):
        self.id = id
        self.name = name
        self.friends = []

    def __str__(self):
        return "*users[" + str(id) + "]"
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61171727

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档