在python中从Dictionary中选择随机项时出错

时间:2013-09-17 14:21:44

标签: python random dictionary

我不想创建一个程序,从两个不同的词典中选择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])

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

谢谢

2 个答案:

答案 0 :(得分:3)

问题在于,您使用重复键创建词典 - 实际上,您的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)

答案 1 :(得分:1)

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(玩具[rant])。

如果不使用列表会更好,否则会使密钥不同。