带花括号的字典和 OrderedDict
Dict with curly braces and OrderedDict
我以为我为自己设定了一个简单的项目,但我想不是。我认为我使用 Ordered dict 函数的时间很长,因为我不断得到:
ValueError: too many values to unpack (expected 2)
代码:
import random
import _collections
shop = {
'bread': 2,
'chips': 4,
'tacos': 5,
'tuna': 4,
'bacon': 8,
}
print(shop)
'''
items = list(shop.keys())
random.shuffle(items)
_collections.OrderedDict(items)
'''
n = random.randrange(0, len(shop.keys()))
m = random.randrange(n, len(shop.keys()))
if m <= n:
m += 1
print(n, " ", m)
for key in shop.keys():
value = shop[key] * random.uniform(0.7,2.3)
print(key, "=", int(value))
if n < m:
n += 1
else:
break
我希望此代码能够混淆字典,然后将值乘以 0.7 - 2.3。然后在范围内循环 0-5 次,以便从字典中给我一些随机键。
我已将 ''' ''' 放在我遇到的代码上,并给出了错误。
d = collections.OrderedDict.fromkeys(items)
然后根据需要使用新创建的字典d
。
你非常接近,但你不能只给出新键的列表 OrderedDict
,你还必须给出值...试试这个:
import random
import collections
shop = {
'bread': 2,
'chips': 4,
'tacos': 5,
'tuna': 4,
'bacon': 8,
}
print(shop)
items = list(shop.keys())
random.shuffle(items)
print(items)
ordered_shop = collections.OrderedDict()
for item in items:
ordered_shop[item] = shop[item]
print(ordered_shop)
示例输出:
{'chips': 4, 'tuna': 4, 'bread': 2, 'bacon': 8, 'tacos': 5}
['bacon', 'chips', 'bread', 'tuna', 'tacos']
OrderedDict([('bacon', 8), ('chips', 4), ('bread', 2), ('tuna', 4), ('tacos', 5)])
您也可以这样做(正如@ShadowRanger 所指出的):
items = list(shop.items())
random.shuffle(items)
oshop = collections.OrderedDict(items)
这是可行的,因为 OrderedDict
构造函数采用键值元组列表。回想起来,这可能是您最初采用的方法所追求的 - 将 keys()
换成 items()
。
我以为我为自己设定了一个简单的项目,但我想不是。我认为我使用 Ordered dict 函数的时间很长,因为我不断得到:
ValueError: too many values to unpack (expected 2)
代码:
import random
import _collections
shop = {
'bread': 2,
'chips': 4,
'tacos': 5,
'tuna': 4,
'bacon': 8,
}
print(shop)
'''
items = list(shop.keys())
random.shuffle(items)
_collections.OrderedDict(items)
'''
n = random.randrange(0, len(shop.keys()))
m = random.randrange(n, len(shop.keys()))
if m <= n:
m += 1
print(n, " ", m)
for key in shop.keys():
value = shop[key] * random.uniform(0.7,2.3)
print(key, "=", int(value))
if n < m:
n += 1
else:
break
我希望此代码能够混淆字典,然后将值乘以 0.7 - 2.3。然后在范围内循环 0-5 次,以便从字典中给我一些随机键。
我已将 ''' ''' 放在我遇到的代码上,并给出了错误。
d = collections.OrderedDict.fromkeys(items)
然后根据需要使用新创建的字典d
。
你非常接近,但你不能只给出新键的列表 OrderedDict
,你还必须给出值...试试这个:
import random
import collections
shop = {
'bread': 2,
'chips': 4,
'tacos': 5,
'tuna': 4,
'bacon': 8,
}
print(shop)
items = list(shop.keys())
random.shuffle(items)
print(items)
ordered_shop = collections.OrderedDict()
for item in items:
ordered_shop[item] = shop[item]
print(ordered_shop)
示例输出:
{'chips': 4, 'tuna': 4, 'bread': 2, 'bacon': 8, 'tacos': 5}
['bacon', 'chips', 'bread', 'tuna', 'tacos']
OrderedDict([('bacon', 8), ('chips', 4), ('bread', 2), ('tuna', 4), ('tacos', 5)])
您也可以这样做(正如@ShadowRanger 所指出的):
items = list(shop.items())
random.shuffle(items)
oshop = collections.OrderedDict(items)
这是可行的,因为 OrderedDict
构造函数采用键值元组列表。回想起来,这可能是您最初采用的方法所追求的 - 将 keys()
换成 items()
。