【问题标题】:Confusion taking a key( and value! ) from a dictionary in python混淆从python中的字典中获取键(和值!)
【发布时间】:2014-04-08 00:08:18
【问题描述】:

所以我自己有点问题。我有一本字典,我想从该字典中随机选择不返回列表

random.choice() 返回一个列表
random.sample() 返回一个列表
random.keys() 和 random.values() 都返回列表。
我需要一个返回键它的值的函数。

伪代码如下:

import random
myDict = {"IronSword" : 15, "SteelSword" : 30, "Playing Cards" : 45, "Spider legs" : 60"}
d = random.functionNameHere(myDict, 1) # Same arguments as random.sample()
print d

应该返回类似 {"SteelSword" : 30} 的内容,而不是 ['SteelSword']。
对不起,如果我有点脱节,我跳过了一些简单的事情。我是一个中级 python'er,还没有进入字符串文字。任何帮助将不胜感激!

【问题讨论】:

  • 我认为random.choice(myDict.items()) 可以满足您的需求,但您应该再试一次。我真的不明白为什么random.choice() 会返回一个列表,你用什么调用它来获取一个列表作为返回值?
  • @mhlester 这个问题很接近,但 OP 说他不想要一个列表,而之前的答案返回一个列表。
  • 你从哪里得到random.keys()random.values()?这些不是python标准库的一部分! random.choice 从项目列表中返回单个项目。如果该列表恰好由其他列表或元组组成,那么choice 可能会返回一个列表或元组。
  • @Joel 这就是为什么第一行是import random
  • @user3508907 当你说你希望函数返回键和值,而你不希望函数返回一个列表,你是什么意思?你想回来什么类型的? tupledict,还是别的什么?

标签: python random dictionary


【解决方案1】:

制作列表是进行随机选择然后制作新字典的中间步骤:

 items = list(myDict.items())        # list of key/value pairs
 key, value = random.choice(items)   # pick a random pair
 print {key: value}                  # make a dictionary out of the result

希望这会有所帮助:-)

【讨论】:

  • 我了解大部分内容,但我没有得到一件事;当您分配键时,value = random.choice(items),如果其中两个被分配给一个键怎么办?还是两者都有价值?编辑:没关系,我学会了如何使用 items() ;D。我想这就是我的答案,谢谢!
【解决方案2】:

在 Python 2 中,您可以这样做:

>>> dict(random.sample(myDict.items(), 1))
{'Playing Cards': 45}

random.sample 返回一个元组列表,您可以将其反馈到dict 以创建一个包含一个条目的字典。

【讨论】:

    【解决方案3】:

    random.choice 将从可迭代对象中随机选择。

    from random import choice
    d = dict([choice(myDict.items())])
    print d
    

    【讨论】:

      【解决方案4】:

      如果你没有看到你想要的内置,写它:

      def getOne():
          k = random.choice(myDict.keys())
          v = myDict[k]
          return (k,v)
      

      测试:

      >>> getOne()
      ('SteelSword', 30)
      >>> getOne()
      ('Spiderlegs', 60)
      >>> getOne()
      ('Spiderlegs', 60)
      >>> getOne()
      ('SteelSword', 30)
      >>> getOne()
      ('Playing Cards', 45)
      

      【讨论】:

      • 看起来,这些仍然返回列表。
      • 您可以将其分配到左侧为(card, value) = getOne()
      【解决方案5】:

      因为还没有人让它的行为类似于random.sample :)

      import random
      myDict = {"IronSword" : 15, "SteelSword" : 30, "Playing Cards" : 45, "Spider legs" : 60}
      random_keys = random.sample(myDict.keys(), 2)
      d = {k: myDict[k] for k in random_keys}
      return d
      

      【讨论】:

        猜你喜欢
        • 2013-08-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-07-02
        • 2019-04-18
        • 1970-01-01
        • 2013-09-28
        相关资源
        最近更新 更多