【问题标题】:Error in selecting random item from Dictionary in python从python中的字典中选择随机项目时出错
【发布时间】:2013-09-17 14:21:44
【问题描述】:

我不想创建一个从两个不同字典中选择 2 个随机项目的程序。现在我不想检查这些项目的总和是否等于用户提供的值。在我从不同的字典中找到 2 个随机项,加起来等于用户输入的数字之前,我不会执行此操作。

这是我尝试做的:

import random
credit=int(raw_input("Please enter your amount: "))
food=dict([(10, 'Lays'), (10,'Pepsi'), (10,'Burger')])
toys=dict([(10, 'Car'), (10,'Train'), (10,'Chess')])
ranf=random.choice(food.keys())
rant=random.choice(toys.keys())
while int(ranf)+int(rant)!=credit:
    ranf=random.choice(food.keys())
    rant=random.choice(toys.keys())
print(ranf)
print(food[ranf])
print(rant)
print(food[rant])

当我尝试运行此代码时,它无法打印这两个随机项目。我没有收到任何错误消息。请运行此代码并帮助我。

谢谢

【问题讨论】:

  • 为什么不直接创建像food = {10: 'Burger'}/etc 这样的字典呢?

标签: python random dictionary


【解决方案1】:

问题在于,您使用重复键创建字典 - 实际上,您的 food 字典仅包含 (10,'Burger') 而您的玩具字典仅包含 (10,'Chess') 项目(它们都只包含最近添加的项目,它取代了所有以前的)。最简单和最快的解决方法是放弃使用字典:

import random
credit=20
food=[(10, 'Lays'), (10,'Pepsi'), (10,'Burger')]
toys=[(10, 'Car'), (10,'Train'), (10,'Chess')]
ranf=random.choice(food)
rant=random.choice(toys)
while int(ranf[0])+int(rant[0])!=credit:
    ranf=random.choice(food)
    rant=random.choice(toys)

print(ranf)
print(rant)

【讨论】:

  • 非常感谢兄弟!我喜欢你的解释。向你致敬(Y)
【解决方案2】:

food.keys() 只返回唯一键。因此,基本上由 food.keys() 函数返回的唯一键列表是 [10]。 例如,如果您制作像 food = dict([(10, 'Lays'), (15,'Pepsi'), (15,'Burger')]) 这样的字典 那么 food.keys() 返回的列表将是 [10,15] 而不是 [10,15,15] 这是您所期望的。因此,在您的代码中,如果 ranf = 10,则解释器会占用分配给该键的最新值。

因此,您使用的 random.choice() 是徒劳的。 此外,您的代码中有一个愚蠢的错误,您写的是 print(food[rant]) 而不是 print(toys[rant])。

最好不使用列表,否则,使键不同。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-18
    • 1970-01-01
    • 2020-04-04
    • 1970-01-01
    • 1970-01-01
    • 2016-04-14
    • 2015-01-09
    相关资源
    最近更新 更多