2013-08-05 15 views
0

我正在創建Python中的字典,但列表和Python之間的細線令我困惑。我有的是在python中消除字典間的重複

values = []

凡在我會的值存儲爲

values.append({newvalue : oldvalue})

列表或字典不管它是什麼,它的工作,但本身中沒有檢查重複。所以我做的是

for i in range(len(values)): 
    if ((newvalue not in values[i])): 
     values.append({newvalue: oldvalue}) 

但這是行不通的。爲什麼?我該如何解決這個問題?如果你有時間,請解釋如何與字典列表不同,以及我的代碼中有什麼。一個列表或一本字典?

感謝

+0

你想在這裏做什麼?您正在構建一個詞典列表,每個詞典都有一個鍵和值。你想要建立一個字典嗎? –

+0

如果是這樣,則執行'values = {}',然後'values [newvalue] = oldvalue'。 –

+0

這就是我發現很難理解字典和列表之間的區別的問題......任何幫助? – user9517536248

回答

1

首先,如果你想要一個空的字典,不這樣做values = [],這將使列表,而不是做

values = {} 

添加到字典時,做到這一點

當檢查是否有某些東西已在鑰匙中時,請執行此操作

if newkey not in mydict: 
    print('this will not overwrite anything') 

我認爲你誤解了字典的概念
當你這樣做時key將是你的字典鍵,而val將是你的字典值。字典是對術語的組合順序{鍵:值}所以如果你做myDict[key]你會得到value


如果你想添加到字典中,同時確保不會覆蓋任何東西,這個簡單的例子都會爲你做到這一點。

if newkey not in mydict: 
    mydict[newkey] = newvalue 
+0

謝謝我會試試這個@stephan,但你能回答我完整的問題我是新來的現實世界的Python編程,所以有點難以在列表和字典之間畫一條線 – user9517536248

+0

@ NottyShinchan確定我會在片刻之後添加它 – Stephan

+0

@NottyShinchan完成 – Stephan

0

列表是元素的序列。元素由隱含索引編號(並排序)。這個索引主要用於識別列表中的元素。元素可以重複。索引不是。如果您爲任何元素(由其索引標識)指定新值,則新值將替換舊值。

示例:在["day", "midnight", "night", "noon", "day", "night"],(隱式)的索引是0,1,2,3,4,5是list[0] 「天」,list[1]是 「午夜」,list[4]也是 「天」,以此類推。 list[3]= "midday"將元素3的值從「中午」更改爲「中午」。 list.append("afternoon")在列表末尾添加一個元素,該元素變爲list[6]

列表是表示有用:(可能重複的)元件的

  • 類別。
  • 當它們的順序(列表中的位置)是 重要的元素的集合。

A 詞典是沒有固有順序的元素的集合。字典中的元素由明確鍵標識。與列表一樣,元素可以重複,但鍵不能,並且如果您爲任何元素(由其標識)分配新值,則新值將替換舊值。

例如:鍵爲「dia」,「medianoche」,「noche」,「mediodia」,「tag」和「nacht」。 dict["dia"]是「日」,dict["medianoche"]是「午夜」,dict["tag"]也是「日」,依此類推。 dict["mediodia"]= "midday"會將由「mediodia」標識的元素的值從「noon」替換爲「midday」,並且dict["tardes"]= "afternoon"將爲值爲「afternoon」的關鍵「tardes」添加元素,因爲之前沒有由「tardes」 。這與列表不同,這需要append添加元素。

詞典是表示有用:

  • 協會(「翻譯」,「等對應」)的數據(即,鍵 成元素,但不是圓的,因爲元素可以是重複的其他方式的)。
  • 「列表」與「索引」是不是整數值(但字符串,浮點值等)
  • 「疏影名單」,其中鍵是整數,但 元素廣大mayority是無。這通常是爲了節省內存。
0

在代碼中,要創建一個空的列表

values = [] 

然後,創建一個字典{newvalue : oldvalue}只有一個元素oldvalue,其關鍵是newvalue。最後,您通過方法append將此字典添加到列表中。是的,在Python中,將字典作爲列表和列表的元素作爲字典的元素(甚至是它們的鍵)是絕對有效的。但是,這很可能不是你想要實現的。

如果你想要的是與元素newvalueoldvalue名單,你應該寫:

values= [] 
values.append(newvalue) 
values.append(oldvalue) 

或者乾脆

values= [newvalue, oldvalue] 

如果你想要的是一個單一的元素oldvalue字典由鑰匙newvalue確定,你應該寫:

values= {} 
values[newvalue]= oldvalue 

或者乾脆

values= {newvalue: oldvalue} 

您的代碼不工作,因爲values最初是空的,所以for循環不會重複的。你可能是打算是:

values= {} 
if newvalue not in values.keys(): # "newvalue not in values" is shorter but can be misleading 
    values[newvalue]= oldvalue 

values= {} 
if values[newvalue] is None: 
    values[newvalue]= oldvalue 

此外,values.update({newvalue: oldvalue})是同義詞values[newvalue]= oldvalue,但你似乎是試圖用這種形式的混合,並列出了做values.append({newvalue: oldvalue})。同樣,字典不是單元素字典列表(這是你正在構建和試圖操作的)。