在Python中从字典中获取键(及其值)的困惑

1 投票
5 回答
538 浏览
提问于 2025-04-18 01:47

我遇到了一点问题。我有一个字典,我想从这个字典中随机选择一个项,但不想返回一个列表

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 学习者,还没有接触到字符串字面量。任何帮助都非常感谢!

5 个回答

0

random.choice 是一个函数,它可以从一个可迭代的对象中随机选择一个元素。

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

因为还没有人让它的行为像 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
0

如果你没有找到想要的功能,那就自己写一个:

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)
1

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

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

random.sample会返回一个包含元组的列表,然后你可以把这个列表放进dict里,这样就能创建一个只有一个条目的字典。

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

希望这对你有帮助 :-)

撰写回答