任何人都可以幫助我解決以下代碼的問題:
k = {'boy':[2,3,6,8],
'girl':[3,5,7,9]
}
n = 2
m = {}
for (key, value) in k.items():
m[key] = [
n * value for value in k.values()
]
print(m['boy'])
[[2, 3, 6, 8, 2, 3, 6, 8], [3, 5, 7, 9, 3, 5, 7, 9]]
我需要一個將 n 乘以字典中串列元素的每個值的結果。S所以結果應該是:
m = {'boy':[4,6,12,16],
'girl':[6,10,14,18]}
uj5u.com熱心網友回復:
k = {'boy': [2,3,6,8],
'girl': [3,5,7,9]}
n = 2
m = {key: [v * n for v in value]
for key, value in k.items()}
如果您不熟悉推導式,這會給出相同的結果
m = {}
for key, value in k.items():
l = []
for v in value:
l.append(v * n)
m[key] = l
帶有理解的版本更快,在我看來更具可讀性。
uj5u.com熱心網友回復:
您沒有正確分配鍵和值:
k = {'boy':[2,3,6,8],
'girl':[3,5,7,9]
}
n = 2
m = {}
for (key, value) in k.items():
m[key] = key
m[key] = [
n * val for val in value
]
print(m['boy'])
print(m['girl'])
輸出 :
[4, 6, 12, 16]
[6, 10, 14, 18]
uj5u.com熱心網友回復:
在 python 中,您不能將串列與*運算子相乘,因為這是為重復串列保留的:
[0] * 5
result: [0, 0, 0, 0, 0]
你可以通過兩種方式做到這一點:
- 您使用
numpy支持此行為的陣列。 - 您顯式地將每個元素相乘。例如像:
k = {'boy':[2,3,6,8],
'girl':[3,5,7,9]
}
n = 2
m = {}
for (key, value) in k.items():
m[key] = [
n * one_value for one_value in value
]
我也剛剛注意到您正在覆寫變數value。請注意這一點,因為這可能會導致難以發現問題。最好在可能的情況下始終為變數使用未使用的名稱,除非您真的打算重用一個。您還選擇了k.values()該詞典中的所有串列,而不僅僅是您要操作的串列。
uj5u.com熱心網友回復:
問題是,您正在使用 迭代主字典值k.values(),而您可以只value在專案中使用 。喜歡
m[key] = [
n * val for val in value
]
并為您提供額外的單線
m = {key:list(map(lambda x: x*n, value)) for key,value in k.items()}
uj5u.com熱心網友回復:
在你的 for 回圈(k.values() 中的值)中,值是一個串列,所以當你將它乘以 n 時,這將重復串列中的元素 n 次。而不是 k.values() 您可以使用 value 如下:
k = {
'boy':[2,3,6,8],
'girl':[3,5,7,9]
}
n = 2
m = {}
for (key, value) in k.items():
m[key] = [v*n for v in value]
print(m)
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/451089.html
