2013-03-24 3 views
-1

Я хотел бы создать словарь формата в примере ниже.Как создать словарь словарей из кортежей python

c={ 
    'A':{('AB',2.9)}, 
    'B':{('AS',3.9)}, 
    'R':{('D',2.0)}, 
    'V':{('AD',2.9)}, 
    'G':{('AX',2.9)} 
} 

У меня этот кортеж корма в петле. Вот что я пробовал, но из этого получается неправильный формат.

my_tuple = ('AB',2.9) 
c   = {} 
my_key = 'A' 
c.update({my_key:{my_tuple}}) 

Для этого конкретного случая я хотел бы получить {'A': set([('AB', 2.9)])}. Я понимаю, что это правильный словарь, но как это сделать лучше и вернуть значение c в формате ?. Я хочу, т.е .:

{'A': {('AB', 2.9)}} 
+0

Вы говорите нам, что вас раздражает представление «набора»? – root

+0

Совсем нет. Для простоты и легкой интеграции мои требования требуют, чтобы я выводил данные в этом формате, в противном случае мне комфортно с набором. @root Есть ли способ устранить набор и иметь {} на месте? Это может помочь. спасибо –

+0

Что вы пытаетесь выполнить? Зачем вам нужно изменить 'set presentation'? – root

ответ

2

s = {1, 2, 3} более короткий путь, чтобы объявить s = set([1,2,3])

Таким образом, вы уже получили то, что вы хотите, это просто представление вопрос.

>>> {('AB',2.9)} == set({('AB',2.9)}) 
True 
+0

Я думаю, что чего-то не хватает. То, что вы сделали, правильно. Как теперь представить свой набор ({('AB', 2.9)}) в {('AB', 2.9)}. Этот результат будет записан в файл, и он должен быть записан как {('AB', 2.9)} no set –

+0

Если представление - это все, что вам нужно, я предлагаю вам обратиться к ответу @ Abhijit, который делает именно то, что вы хотите , определяя метод '' __repr__'' дочернего класса '' set''. –

1

Если представление все, что имеет значение для вас, вы можете наследовать от set и создать свою собственную версию __repr__, которая даст вам свободу использования вашего воображения, чтобы удовлетворить вас :-)

>>> class funky_set(set): 
    def __new__(cls,*args): 
     return set.__new__(cls,args) 
    def __repr__(self): 
     return "{{{}}}".format(','.join(map(str, self))) 

>>> my_tuple = ('AB',2.9) 
>>> c   = {} 
>>> my_key = 'A' 
>>> c.update({my_key:funky_set(my_tuple)}) 
>>> c 
{'A': {AB,2.9}}