【问题标题】:Python: Return all values that corresponds to a given key inside a dictionaryPython:返回与字典中给定键对应的所有值
【发布时间】:2013-08-07 09:29:12
【问题描述】:

我有以下字典,其中的键对应于它在 Rock Paper Scissors Lizard Spock 规则内击败的值。因此。 “剪刀”击败“纸”和“蜥蜴”。

this_defeats_that = {'scissors': 'paper',
                     'paper': 'rock',
                     'rock': 'lizard',
                     'lizard': 'spock',
                     'spock': 'scissors',
                     'scissors': 'lizard',
                     'lizard': 'paper',
                     'paper': 'spock',
                     'spock': 'rock',
                     'rock': 'scissors'
}

但是,我发现当我

print this_defeats_that['scissors']

只打印“蜥蜴”。进一步的调查表明,无论我如何构建字典,打印语句都只会打印与给定键对应的最后一个值。

我需要的是打印所有相关的值,以便

 # Example, this behavior should be consistent regardless of key.
print this_defeats_that['scissors']

将以任意顺序打印“蜥蜴”和“纸”。最好以列表形式返回。

所以我尝试了一个列表理解,

print [value for key, value in this_defeats_that.iteritems() if key == 'scissors']

但它也只返回与键对应的最后一个值,即“蜥蜴”。 我现在不知道该怎么做,急需帮助。

【问题讨论】:

    标签: python dictionary key key-value


    【解决方案1】:

    您必须更改存储映射的方式。 python中的字典是键值映射,键是唯一的。

    考虑为每个唯一键创建一个值列表:

    >>> this_defeats_that = {'scissors': ['paper', 'lizard'],
                             'paper': ['rock', 'spock'],
                             'lizard': ['spock', 'paper'],
                             'spock': ['scissors', 'rock'],
                             'rock': ['scissors', 'lizard']}
    >>> this_defeats_that['scissors']
    ['paper', 'lizard']
    

    【讨论】:

    • 'rock' 也击败了'lizard'。 :-P
    • @MartijnPieters 没关系,spock 蒸发 rock :)
    • @MartijnPieters 不知何故,我设法在原始帖子中排除了该行,所以我应该受到责备!不过不错。
    【解决方案2】:

    您为什么不将具有单个键的那些组合到一个列表中?

    例如)

    this_defeats_that = {'scissors': ['paper' , 'lizard'] , 'paper': ['rock', 'spock' ] 
        ...}
    

    然后检索,

    for i in this_defeats_that['scissors']:
        print i
    

    这就是诀窍

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-08-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-10
      • 2021-11-17
      相关资源
      最近更新 更多