我是python的新手,試圖理解這些概念。我正在嘗試遍歷一個串列,在串列內部,我保留了已初始化的字典資料集。我已經定義了遍歷和檢索資料的函式。
最初,第一個鍵和值將分配給 activeConfiguration 串列i,e activeConfiguration = ['Mammals','dogs'],并且此 activeConfiguration 作為getNextConfig(data, activeConfiguration)函式的引數與物體資料一起傳遞。
我的目標是,在我進行函式呼叫的某些步驟之后,getNextConfig(data, activeConfiguration)它應該從特定鍵的串列中檢索下一個值。我在下面指定的預期結果。
我的代碼有錯誤,請幫助我修復并獲得所需的結果。我在這里先向您的幫助表示感謝。
#物體資料初始化
vertebrateAnimalsDict = [
{
"Reptiles": "Snakes, lizards, crocodiles, alligators, turtles"
},
{
"Mammals": "dogs, cats, horses, duckbill platypuses, kangaroos, dolphins, whales"
},
{
"Minibeasts": "Insects, spiders, crustaceans"
}
]
我的函式呼叫:
activeConfiguration = ['Mammals','dogs']
activeConfiguration = getNextConfig(vertebrateAnimalsDict, activeConfiguration)
print(activeConfiguration)
#some tasks in between
...
activeConfiguration = getNextConfig(vertebrateAnimalsDict, activeConfiguration)
print(activeConfiguration)
#some other tasks inbetween
...
activeConfiguration = getNextConfig(vertebrateAnimalsDict, activeConfiguration)
print(activeConfiguration)
我的代碼:
#!/usr/bin/env python
def getNextConfig(data, activeConfiguration):
key_count=len([ele for ele in data if isinstance(ele,dict)])
val_index=-1
for dic in data:
for k,v in dic.items():
if k==activeConfiguration[0]:
key_index=next((i for i,d in enumerate(data) if k in d), None)
v=data[key_index][k]
v = v.split(',')
val_index=v.index(activeConfiguration[1])
if val_index != (len(v)-1):
return [k,v[val_index 1]]
elif key_index==(key_count-1) and val_index == (len(v)-1):
return []
else:
val_index=0
key_index=key_index 1
break
if val_index==0:
v=data[key_index][k]
v = v.split(',')
return [k,v[val_index]]
else:
continue
我的預期輸出結果:-
Reptiles : Snakes
Reptiles : lizards
Reptiles : crocodiles
Reptiles : alligators
Reptiles : turtles
Mammals : dogs
Mammals : cats
and so on ...
uj5u.com熱心網友回復:
執行以下操作很簡單:
從字典串列中創建一個字典:
dict1 = {k: v.split(", ") for x in vertebrateAnimalsDict for k, v in x.items()}
編輯:
將其轉換為系列并展開(因此值串列中的每個專案都在不同的行上):
pairs = pd.Series(dict1).explode()
這個小功能:
def getNextConfig(pair):
# get list of bools for whether item matches, and "shift"
x = pairs[[False] list(pairs == pair[1])[:-1]]
# print the pair, for example
print([x.index.item(), x.item()])
# return the pair
return [x.index.item(), x.item()]
然后從頭開始運行代碼:
pair = ["Reptiles", "Snakes"]
pair = getNextConfig(pair) # repeat this line to the end (and error on the very last, where it cannot continue)
以及舊答案的回圈,以防萬一您決定將回圈遍歷每個組合或希望將來執行此操作:
for k, v in dict1.items():
for idx in range(len(v)):
print([k, v[idx]])
# the other code here...
uj5u.com熱心網友回復:
如果我正確理解您的問題,您可以使用生成器來迭代這些值:
def getNextConfig(data):
for dic in data:
for key, value in dic.items():
values = value.split(', ')
for v in values:
yield key, v
然后你可以像這樣回圈它:
configs = getNextConfig(vertebrateAnimalsDict)
for k, v in configs:
print(f'{k} : {v}')
輸出(用于您的樣本資料):
Reptiles : Snakes
Reptiles : lizards
Reptiles : crocodiles
Reptiles : alligators
Reptiles : turtles
Mammals : dogs
Mammals : cats
Mammals : horses
Mammals : duckbill platypuses
Mammals : kangaroos
Mammals : dolphins
Mammals : whales
Minibeasts : Insects
Minibeasts : spiders
Minibeasts : crustaceans
或者為了匹配您在問題中的代碼風格,我們使用next從生成器中獲取下一個值:
configs = getNextConfig(vertebrateAnimalsDict)
activeConfiguration = next(configs, None)
if activeConfiguration is not None:
# do something with it
請注意,我們提供默認值next以避免StopIteration錯誤。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/479560.html
標籤:python-3.x 列表 字典 遍历
下一篇:dict[new_key]=[dict[key],new_value]和x=dict[key] [new_value]有什么區別?
