2009-11-04 85 views
0

我想:詞典操作...索引/迭代/驗證

  • 檢查我
  • 檢查,看在位置的鍵/值,如果鍵/值包含字符串
  • 刪除/存儲在另一個變量或者鍵/值

的這個Java代碼的equivelant:

//Some list... 
ArrayList<String> example; 
... 
//Index into data structure 
example.get(i); 
//Check for some string... 
if (example.get(i).contains("someText")){ 

    somestuff; 

} 
//Store in some other variable 
exam = example.get(i) 

這就是我在Java中有效的嘗試,但是我希望能夠用Python dictionarties做到這一點,但我不確定這是否可能,因爲我發現Python文檔比較難讀。

+3

請在Python版本中發佈您的最佳嘗試。這不是「請爲我的網站編寫我的程序」 –

回答

4

Python字典是作爲散列表實現的,所以沒有內在排序;因此,「立場我」是一個完全荒謬的詞典概念 - 這就像是要求詞典詞條最黃色,或者最不相似於美洲駝......這些概念不適用於詞典條目,「位置我「同樣完全不適用。

i從哪裏來,即什麼真的問題,你正試圖解決?如果你的要求是迭代字典,你直接做,沒有「數字指數」的柺杖。或者,如果您確實需要保留某些特定順序或其他,那麼您不使用字典,而是使用一些不同的數據結構。如果你準確解釋你想要解決的問題,我相信我們可以幫助你。

+0

是的,我錯誤地使用了字典。我只是看到是否有可能,而不是將其轉換爲列表(我剛剛發佈了一個問題)。我很感謝解釋,謝謝。 – Federer

2

直接翻譯(對於ArrayList<String>,想要一本字典,你不這樣做,你想有一個列表):

example = ["foo", "bar", "baz"] 
str = example[i] 
if "someText" in str: 
    somestuff() 

習慣的for關鍵字,不過,它的真棒在Python:

for str in example: 
    if "someText" in str: 
     someStuff() 

下面是一個例子使用字典:

fruits = { 
    "apple": "red", 
    "orange": "orange", 
    "banana": "yellow", 
    "pear": "green" 
} 

for key in fruits: 
    if fruits[key] == "apple": 
     print "An apple is my favorite fruit, and it is", fruits[key] 
    else: 
     print "A", key, "is not my favorite fruit, and it is", fruits[key] 

在字典上使用for進行迭代會產生密鑰,所以仍然由您自行索引項目。正如Alex指出的那樣,我們真的非基地用很少的信息回答您,並且聽起來您沒有紮根於數據結構中(每次迭代它時,字典可能會產生不同的順序)。

+0

是的,我可以在列表中完成(如您的示例)。但是,我必須能夠索引到一本字典。那麼這是不可能的? – Federer

+0

是的,它是,但字典需要一個密鑰。我會編輯答案。 –

+0

字典在每次迭代時都會產生相同的順序,因爲它們是散列表,並且它們按元素的順序或哈希值進行迭代。因此,當您添加新密鑰時,它可能會出現在下一次迭代期間的任何位置,但每次迭代字典時都會出現在相同的位置。但總的來說,你不應該依賴這種行爲 - 如果你需要排序,考慮實現你自己的數據結構。 – Abgan

0

Python的優點是你可以交互地嘗試代碼。

所以我們創建了一個list它就像一個Java List

>>> mylist = ["python","java","ruby"] 
>>> mylist 
['python', 'java', 'ruby'] 

我們可以通過它的索引得到列表中的條目:

>>> mylist[0] 
'python' 

,並使用find功能來搜索子字符串:

>>> mylist[1].find("av") 
1 
>>> mylist[1].find("ub") 
-1 

如果未找到字符串,則返回-1。

複製到一個新的變量中的條目只是做你如何期望:

>>> newvalue = mylist[2] 
>>> newvalue 
'ruby' 

或者,我們可以創建一個dict這就像一個Java Map,通過鍵,而不是指數存儲,但這些工作與Python中的列表非常相似:

>>> mydict = { 'python':'Guido', 'java':'James', 'ruby':'Yukihiro' } 
>>> mydict['java'] 
'James' 
>>> othervalue = mydict['ruby'] 
>>> othervalue 
'Yukihiro' 
>>> mydict['python'].find('uid') 
1 
>>> mydict['python'].find('hiro') 
-1 
>>> mydict['ruby'].find('hiro') 
4 
1

喲,你可以這樣做來重現與你的Java示例相同的行爲。

# Some list 
example = {} # or example = dict() 
... 
# Index into data estructure. 
example[example.keys(i)] 
# Check for some string... 
if example[example.keys(i)] == 'someText' : 
    pass 
# Store in some other variable... 
exam = example[example.keys(i)] 
del example[example.keys(i)] 
# ...or 
exam = example.pop(example.keys(i)) 
+0

爲什麼不直接將內容存儲在字典中?是否有必要有幾個鍵指向相同的內容(原諒我,如果我錯過了什麼,只是好奇)。 – RedGlyph

+0

在Java示例中,我明白程序員希望通過索引而不是按鍵訪問。如果他/她想要通過索引訪問,則解決方案是在鍵列表中找到索引,並通過此鍵獲取diccionari的值。獲取密鑰列表 - >獲取密鑰 - >使用i密鑰從字典中獲取值。 只是一個想法! – ocell