2017-12-05 13 views
1

나는 나 자신을 위해 간단한 프로젝트를 시작했다고 생각했지만 그렇지 않다고 생각한다. 나는 점점 계속 때문에 나는 오랫동안 주문한 DICT 기능을 사용하여 메신저를 생각 :중괄호와 OrderedDict로 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 번 범위 내에서 반복하십시오.

나는 투쟁하는 코드 위에 '' '' '를 놓았고 오류가 발생했습니다. 당신이 원하는대로

+1

OrderedDict를 전혀 사용하지 않습니다. 방금 OrderedDict를 사용하여 코드처럼 보이는 문자열 리터럴을 사용합니다 (그리고 모든 작업을 잘못 수행하여 키 목록에서 OrderedDict를 호출하고 생성 된 OrderedDict를 사용하지 않으려 고합니다). – user2357112

답변

3

당신은 매우 가까운,하지만 키가 새 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()으로 바꾸십시오.

+2

'items = list (shop.items()) '로 만들고 셔플을 수행 한 다음'ordered_shop = collections.OrderedDict (items)'키를 섞고 나중에 다시 상점에서 값을 찾아야 할 필요가 없습니다. – ShadowRanger

+0

@ShadowRanger 좋은 지적 - 고맙습니다 :-) – Attie

1
d = collections.OrderedDict.fromkeys(items) 

그리고 새로 DICT d을 만들어 사용합니다. 너무 값을 제공해야합니다,

+0

이것은'shop'에서 값을 가져 오지 않습니다. – Attie

+0

무엇을 의미합니까? –

+0

그 결과는 키가있는'dict'이지만 모든 값은'None'입니다 – Attie