【问题标题】:Print ONLY Dictionary Name from Inside a List in Python仅从 Python 列表中打印字典名称
【发布时间】:2015-08-22 17:01:17
【问题描述】:

我有一个包含三个字典的列表,如下所示:

lloyd = {
"name": "Lloyd",
"homework": [90.0, 97.0, 75.0, 92.0],
"quizzes": [88.0, 40.0, 94.0],
"tests": [75.0, 90.0]
}

alice = {
"name": "Alice",
"homework": [100.0, 92.0, 98.0, 100.0],
"quizzes": [82.0, 83.0, 91.0],
"tests": [89.0, 97.0]
}

tyler = {
"name": "Tyler",
"homework": [0.0, 87.0, 75.0, 22.0],
"quizzes": [0.0, 75.0, 78.0],
"tests": [100.0, 100.0]
}

students = [lloyd, alice, tyler]

我想遍历列表并只打印字典的名称

lloyd
alice
tyler

我不想打印字典本身的键或值。

这方面的任何建议都会有所帮助

【问题讨论】:

  • 如果字典名称与属性name相同,为什么不打印呢?
  • 我认为这在 Python 中是不可能的,如果是这样,这不是一个好习惯。你到底想做什么?这与字典无关。

标签: python dictionary


【解决方案1】:

Python 中的对象没有“名称”,它们绑定到变量。考虑以下代码:

lst1 = [3, [4, 5, 6], 7]
lst2 = lst1

列表的“名称”是什么(可以通过lst1lst2 访问)。列表的第二个元素的名称是什么(只有列表存储了对子列表的引用)。

dir() 函数可以为您提供命名空间中的名称列表,但这是您能做的最好的事情。

【讨论】:

    【解决方案2】:

    我知道这是旧的,但我相信我有一个解决问题的方法。这可以通过将这些字典嵌套到另一个字典中来实现。

    取原码:

    lloyd = {
    "name": "Lloyd",
    "homework": [90.0, 97.0, 75.0, 92.0],
    "quizzes": [88.0, 40.0, 94.0],
    "tests": [75.0, 90.0]
    }
    
    alice = {
    "name": "Alice",
    "homework": [100.0, 92.0, 98.0, 100.0],
    "quizzes": [82.0, 83.0, 91.0],
    "tests": [89.0, 97.0]
    }
    
    tyler = {
    "name": "Tyler",
    "homework": [0.0, 87.0, 75.0, 22.0],
    "quizzes": [0.0, 75.0, 78.0],
    "tests": [100.0, 100.0]
    }
    
    students = [lloyd, alice, tyler]
    

    不使用字典列表,而是创建一个名为 users 的嵌套字典,并将用户的字典作为成员。

    users = {
    
        'lloyd' : {
            "name": "Lloyd",
            "homework": [90.0, 97.0, 75.0, 92.0],
            "quizzes": [88.0, 40.0, 94.0],
            "tests": [75.0, 90.0]
            },
    
        'alice' : {
            "name": "Alice",
            "homework": [100.0, 92.0, 98.0, 100.0],
            "quizzes": [82.0, 83.0, 91.0],
            "tests": [89.0, 97.0]
            },
    
        'tyler' : {
            "name": "Tyler",
            "homework": [0.0, 87.0, 75.0, 22.0],
            "quizzes": [0.0, 75.0, 78.0],
            "tests": [100.0, 100.0]
            }
        }
    

    然后是一个简单的for循环来打印用户名...

    for username, user_info in users.items():
        print(f"{username.title()}")
    

    这给出了所需的输出..

    Lloyd
    Alice
    Tyler
    

    我只是在学习自己,所以我希望这对像堆栈溢出社区这样的人有所帮助!

    【讨论】:

      【解决方案3】:
      for i in students:print(i['name'])
      

      【讨论】:

      • @Marcus Müller 不认识朋友。
      • 我重新阅读了这个问题。我认为 OP 试图获取字典的“句柄”,而不是“名称”元素。
      【解决方案4】:
      for x in dict.items():
          print(x[0])
      

      【讨论】:

      • 欢迎来到 Stack Overflow。如果您能描述您的代码并说明它将如何解决问题,那就太好了。
      【解决方案5】:

      标准dict类中没有__name__或这样的attr。(函数有func.func_name)我相信会有一些更好的实现,但我的解决方案如下:

      用一些额外的属性创建一种新类型的 dict ..

      class myspecial_dict(dict):
          def __init__(self,Name,**kwargs):
              super(myspecial_dict,self).__init__(kwargs)
              self.dictname=Name
      
      mys=myspecial_dict("lloyd",**lloyd)
      print mys.dictname
      print mys['quizzes']
      

      打印出来的:

      lloyd
      [88.0, 40.0, 94.0]
      

      如果您想为所有人这样做:

      dicts    =[lloyd,alice,tyler]
      dictnames=["lloyd","alice","tyler"]
      print [myspecial_dict(x,**y).dictname for x,y in zip(dictnames,dicts) ]
      

      产生:

      ['lloyd', 'alice', 'tyler']
      

      【讨论】:

        猜你喜欢
        • 2017-04-26
        • 1970-01-01
        • 2017-08-20
        • 1970-01-01
        • 1970-01-01
        • 2016-06-07
        • 2013-02-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多