[英]How do I edit multiple strings inside a list within a dictionary?
我目前正在使用一個使用字典的數據結構,其中每個鍵的值都是一個列表。 為了這個問題,我將我的結構簡化為一個易於理解的示例。
使用 for 循環,我將如何遍歷每個列表的值並根據每個字符串中的某個字符更改它們? 這是我到目前為止所擁有的:
test_dict = {"key1": ["value1", "value2"], "key2": ["value3", "value4"]}
for key in test_dict:
for value in test_dict[key]:
if "v" in value:
test_dict["key1"][value.index(value)] = value.replace("v", "")
輸出:
{'key1': ['alue4', 'value2'], 'key2': ['value3', 'value4']}
for 循環僅返回值 1 已編輯,由於某種原因,它已更改為值 4。如何編輯循環以刪除所有值中的字母 v,並將它們全部保存在正確的位置?
編輯:感謝您對“key1”而不是“key”的錯字的所有評論。 我一定一直在嘗試測試分步功能並忘記將其更改回“關鍵”。
首先,讓我們澄清一下類型:
from typing import *
test_dict: Dict[str, List[str]]
key: str
value: str
當您使用value.index(value)
時,您正在調用str.index(self)
並且它始終返回 0。您還使用test_dict["key1"]
而不是假定的test_dict[key]
最終代碼:
test_dict = {"key1": ["value1", "value2"], "key2": ["value3", "value4"]}
for key in test_dict:
for i in range(len(test_dict[key])): # better in case there are multiple same elements
if "v" in test_dict[key][i]:
test_dict[key][i] = test_dict[key][i].replace("v", "")
我遍歷了索引,因為列表中可能有多個相等/相同的元素。
您可以嵌套字典理解和列表理解:
test_dict = {"key1": ["value1", "value2"], "key2": ["value3", "value4"]}
output = {k: [v[1:] for v in lst] for k, lst in test_dict.items()}
print(output) # {'key1': ['alue1', 'alue2'], 'key2': ['alue3', 'alue4']}
我已使用v[1:]
刪除第一個字符,但您可以使用原始代碼v.replace('v', '')
代替。
for 循環僅返回值 1 已編輯,由於某種原因,它已更改為值 4。
那是因為您循環遍歷整個字典,每次只用最后一個迭代值替換test_dict["key1"][0]
。
更具體地說,讓我們評估您的代碼並打印每次迭代的結果以及值的索引:
test_dict = {"key1": ["value1", "value2"], "key2": ["value3", "value4"]}
for key in test_dict:
for value in test_dict[key]:
if "v" in value:
test_dict["key1"][value.index(value)] = value.replace("v", "")
print(test_dict)
print(value.index(value))
輸出是:
{'key1': ['alue1', 'value2'], 'key2': ['value3', 'value4']}
0
{'key1': ['alue2', 'value2'], 'key2': ['value3', 'value4']}
0
{'key1': ['alue3', 'value2'], 'key2': ['value3', 'value4']}
0
{'key1': ['alue4', 'value2'], 'key2': ['value3', 'value4']}
0
如您所見,您只需更改test_dict["key1"][0]
每次迭代。
至於答案,我將盡可能簡單易讀:
for k, v in test_dict.items():
test_dict[k] = [value.replace("v", "") for value in v]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.