2013-03-24 122 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

的自由你是否告訴我們你對'set'的表示感到惱火? – root 2013-03-24 08:49:10

+0

完全沒有。爲了簡單和易於集成,我的要求要求我以這種格式輸出數據,否則我對設置感到滿意。 @root有沒有一種方法可以消除這個集合,並且有{}它可以幫助。謝謝 – 2013-03-24 08:53:53

+0

你想完成什麼?你爲什麼需要改變'set representation'? – root 2013-03-24 08:56:38

回答

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)}沒有設置 – 2013-03-24 09:00:18

+0

如果表示法是你所需要的,我建議你參考@ Abhijit的答案,這正是你想要的通過定義''set''子類的'__repr__''方法。 – 2013-03-24 09:03:16

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}}