【问题标题】:Python printing values of values in a dictionaryPython在字典中打印值的值
【发布时间】:2019-11-20 19:25:18
【问题描述】:

在 Python 中,我知道您通过执行 variable.values() 来打印字典中键的值。但是如果我想打印一个特定值的值呢?

举个例子:

pets = {'Dog': ['Poodle', 'Boxer', 'Terrier'], 'Cat': ['Sphynx', 'Ragdoll', 'Birman']}

我想专门选择一个特定品种的动物。例如,我只想打印Boxer

你可以这样做:

animal = list(pets.values())[0]
breed = list(animal.values())[1]
print(breed)

这会给你Boxer。但是,我很好奇我是否可以在一行代码中做到这一点,比如打印一个值的值。

我试过了:

breed = list(list(pets.values()))[0][1]

但它告诉我字符串索引超出范围。

【问题讨论】:

  • 给定的字典pets,首先是无效的语法修复。
  • 你真的不应该使用字典的.values()...你失去了所有的效率。使用密钥,例如:pets['Dog']
  • @Poojan 哎呀,谢谢你看到这个:)

标签: python python-3.x dictionary key-value


【解决方案1】:
print(list(pets.values()))

输出:

[['Poodle', 'Boxer', 'Terrier'], ['Sphynx', 'Ragdoll', 'Birman']]
  • 如您所见,它是一个列表列表。现在每个项目都是您可以通过索引访问的列表。
breed = list(pets.values())[0][1]
  • 这会给你想要的结果。

【讨论】:

  • 哦,对了。我忘记了字典并不总是按顺序列出东西,因此你不能索引东西。
【解决方案2】:

您的数据结构是一个以“集合”为值的字典。 集合不可下标,并且在列表中转换不会保持顺序

>>> list(pets['Dog'])
['Boxer', 'Poodle', 'Terrier']

那么问题是......你真正需要什么?

如果您需要访问品种,您可以/应该使用列表或元组而不是集合

【讨论】:

    【解决方案3】:

    您使用 dict 的方式似乎很奇怪,我假设在您的情况下您应该使用 list 代替

    pets = {'Animal': {'Dog': ['Poodle', 'Boxer', 'Terrier'], 'Cat': ['Sphynx', 'Ragdoll', 'Birman']}}
    

    如果您想要打印特定品种,那么您可能需要一个额外的密钥才能获得使用 dict 的好处

    pets = {'Animal': {'Dog': {1:'Poodle', 2:'Boxer', 3:'Terrier'}, 'Cat': ['Sphynx', 'Ragdoll', 'Birman']}}
    

    然后你可以得到拳击手

    pets['Animal']['Dog'][2]
    

    【讨论】:

    • 你完全改变了OP提供的dict结构。
    【解决方案4】:

    您定义此字典的方式会产生语法错误:

    >>> pets = {'Animal': 'Dog':{'Poodle','Boxer','Terrier'}, 'Cat':{'Sphynx','Ragdoll','Birman'}}
      File "<stdin>", line 1
        pets = {'Animal': 'Dog':{'Poodle','Boxer','Terrier'}, 'Cat':{'Sphynx','Ragdoll','Birman'}}
                               ^
    SyntaxError: invalid syntax
    
    

    我创建了一个类似的字典(这次是一个以物种为键,以品种为值的字典),并展示了如何索引这个新字典:

    >>> pets = {'Dog':('Poodle','Boxer','Terrier'), 'Cat':('Sphynx','Ragdoll','Birman')}
    >>> pets['Dog'][1]
    'Boxer'
    >>>
    

    【讨论】:

    • 你改变了给定字典的结构。让 OP 首先验证输入。
    • 很好,@Poojan。我在发布后立即意识到并将更正。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-02-16
    • 2011-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-18
    相关资源
    最近更新 更多