我知道在創建 dict 時,鍵必須是唯一的,但每個鍵可以有多個值,例如:
這是字典:
d = {1:a, 2:[a,b,c], 3:[e,f,g]}
我想要做的是在python中使用for回圈來提取鍵和關聯值并將它們全部轉化為串列結果,這樣我就可以制作兩個并行串列:
鍵的預期結果:
listA: [1,2,2,2,3,3,3]
期望值的結果:
listB: [a,a,b,c,e,f,g]
對于串列 B,我可以執行代碼來完成它:
listkey = [] #assign a list container
listvalue = [] #assign a list container
for k,v in d.items():
listkey.append(k)
listvalue.append(v)
listB = [ item for elem in listvalue for item in elem]
listB result success: [a,a,b,c,e,f,g]
然而,對于listA,
listA = [ item for elem1 in listvalue for item in elem1]
it just results [1,2,3],but not [1,2,2,2,3,3,3]
我想知道我的代碼有什么問題。我可以通過使用 for 回圈來實作嗎?
uj5u.com熱心網友回復:
您的示例輸入不一致(其中一個字典值不是串列)。如果一致,您可以使用帶有嵌套 for 回圈的串列推導來獲取兩個串列:
d = {1:['a'], 2:['a','b','c'], 3:['e','f','g']}
listA = [ k for k,v in d.items() for _ in range(len(v)) ]
listB = [ c for v in d.values() for c in v ]
print(listA) # [1, 2, 2, 2, 3, 3, 3]
print(listB) # ['a', 'a', 'b', 'c', 'e', 'f', 'g']
串列推導式等效于嵌套的 for 回圈:
# [ k for k,v in d.items() for _ in range(len(v)) ]
listA = []
for k,v in d.items():
for _ in range(len(v)):
listA.append(k)
# [ c for v in d.values() for c in v ]
listB = []
for v in d.values():
for c in v:
listB.append(v)
uj5u.com熱心網友回復:
在 dict 中處理相同型別的值通常更簡單。所以我在這個答案中將第一個值轉換成一個串列。
您可以使用嵌套理解和 a zip:
d = {1: ['a'], 2: ['a', 'b', 'c'], 3: ['e', 'f', 'g']}
key_value = ((k, v) for k, l in d.items() for v in l)
a, b = zip(*key_value)
print(a) # (1, 2, 2, 2, 3, 3, 3)
print(b) # ('a', 'a', 'b', 'c', 'e', 'f', 'g')
如果你確實想要a并b作為串列,你可以使用:
a, b = map(list, zip(*key_value))
# [1, 2, 2, 2, 3, 3, 3]
# ['a', 'a', 'b', 'c', 'e', 'f', 'g']
編輯:使用普通嵌套 for 回圈:
d = {1: ['a'], 2: ['a', 'b', 'c'], 3: ['e', 'f', 'g']}
a, b = [], []
for key, lst in d.items():
for val in lst:
a.append(key)
b.append(val)
print(a) # [1, 2, 2, 2, 3, 3, 3]
print(b) # ['a', 'a', 'b', 'c', 'e', 'f', 'g']
uj5u.com熱心網友回復:
簡單的解決方案:
在您想要添加值時使用list.extend而不是附加:
a = [ 1, 2, 3 ]
b = [ 4, 5, 6 ]
a.extend(b)
結果是,a 將把元素放在自己身上。:)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/400139.html
