[英]Iterate through a list inside a dictionary in python
我對 Python 非常陌生,我需要創建一個函數,將字典中列表中的值除以 2:
dic = {"A":[2,4,6,8], "B":[4,6,8,10]}
所需的輸出:
dic2 = {"A":[1,2,3,4], "B":[2,3,4,5]}
我找到了這個帖子
這有點幫助,但不幸的是我無法弄清楚示例代碼的“任何”部分。
我試過這個:
def divide(dic):
dic2 = {}
for i in range(len(dic)):
for j in range(len(dic[i])):
dic2[i][j] = dic[i][j]/2
return dic2
我寫了不同的變體,但我一直在“for j...”行中收到 KeyError: 0 。
那是因為dict
不像列表,它們不使用索引,它們使用鍵(如標簽),並且您可以使用dict.keys()
來獲取dict
的鍵。
或者,只需使用for in
循環遍歷dict
鍵:
dic = {"A": [2, 4, 6, 8], "B": [4, 6, 8, 10]}
for k in dic: # similar to `for key in dict.keys():`
dic[k] = [x/2 for x in dic[k]]
print(dic)
輸出:
{'A': [1.0, 2.0, 3.0, 4.0], 'B': [2.0, 3.0, 4.0, 5.0]}
如果您不想要那個小數點,請使用//
而不是/
。
看,領悟的力量:
>>> dic = {"A":[2,4,6,8], "B":[4,6,8,10]}
>>> dic2 = {k:[v/2 for v in vs] for k,vs in dic.items()}
>>> dic2
{'A': [1, 2, 3, 4], 'B': [2, 3, 4, 5]}
在外層有一個字典理解,還有一個“內部”列表理解,用於划分每個列表中的值。
您不一定能對字典進行數字迭代——您的range(len(dic))
。 (您也不應該以這種方式遍歷列表。)這就是dic[i]
不起作用的原因——沒有dic[0]
。 相反,迭代它的鍵。
def divide(dic):
dic2 = dic.copy()
for key, value in dic:
for i, _ in enumerate(value): # Enumerate gives the index and value.
dic2[key][i] = value[i]/2
return dic2
誠然,理解是一種更好的方式,但這保留了你所做的事情的形式,並說明了問題所在。
要輕松迭代字典,請在字典中使用 for 鍵。 使用列表理解可以輕松地將列表一分為二
for k in dic1:
dic1[k] = [x / 2 for x in dic1[k]]
以函數形式
def divdict(d):
for k in d:
d[k] = [x/2 for x in d[k]]
您必須使用它們的鍵訪問字典的元素。 在示例中,鍵是“A”和“B”。 您正在嘗試使用整數訪問字典,這會給您帶來范圍錯誤。
以下功能有效:
def divide_dic(dic):
dic2 = {}
# Iterate through the dictionary based on keys.
for dic_iter in dic:
# Create a copy of the dictionary list divided by 2.
list_values = [ (x / 2) for x in dic[dic_iter] ]
# Add the dictionary entry to the new dictionary.
dic2.update( {dic_iter : list_values} )
return dic2
你可以用 lambda 來試試這個:
the_funct = lambda x: x/2
dic = {"A":[2,4,6,8], "B":[4,6,8,10]}
new_dict = {a:map(the_funct, b) for a, b in dic.items()}
## for Python 3.5
new_dict = {a:[*map(the_funct, b)] for a, b in dic.items()}
lambda 函數與 map 結合使用,它將在字典值中的每個元素上迭代函數。 通過使用 dict comprehension,我們可以將 lambda 應用於每個值。
我使用了上面 Wim 答案的細微變化(重點是使用key
的理解):
dic = {"A":[2,4,6,8], "B":[4,6,8,10]}
dic2 = {k:[v/2 for v in dic[k]] for k in dic.keys()}
得到:
dic2
{'A': [1.0, 2.0, 3.0, 4.0], 'B': [2.0, 3.0, 4.0, 5.0]}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.