遍历python字典并在两个列表中附加关键组件
Posted
技术标签:
【中文标题】遍历python字典并在两个列表中附加关键组件【英文标题】:Iterate through python dictionary and appending key component in two lists 【发布时间】:2022-01-10 11:39:34 【问题描述】:我有以下字典,tempDict
('M1', 'P1'): 6.0,
('M1', 'P2'): 10.0,
('M1', 'P3'): 4.0,
('M2', 'P1'): 7.0,
('M2', 'P2'): 9.0,
('M2', 'P3'): 5.0
我正在对这本字典进行一些操作,并将一些关键组件列在一个列表中。假设我有l1 = [], l2 = []
。
假设最小值为 4,我发现 jobsR as ('M1', 'P3')
。我想从 tempDict 中删除出现“P3”的所有键。
我将迭代地从该字典中找到最小值并删除相应的键。由于键是有序对,如果离开的键元素具有第一个组件M1
,那么我将采用列表l1
中的第二个组件,否则在l2
中。我将继续,直到字典变空。我的代码是,
while bool(tempDict):
try:
l1 = []
l2 = []
valMin = min(tempDict.values())
jobsR = [key for key in tempDict if tempDict[key] == valMin]
for (x, y) in jobsR:
if x == 'M1':
l1.append(y)
else:
l2.append(y)
remove_list = []
for key, value in tempDict.items():
if jobsR[0][1] in key[1]:
remove_list.append(key)
for item in remove_list:
tempDict.pop(item)
except KeyError:
print('The dictionary has no item now...')
break
预期输出:
l1 = [P3, P1] and l2 = [P2]
Code_Updated
l1 = []
l2 = []
while bool(tempDict):
valMin = min(tempDict.values())
jobsR = [key for key in tempDict if tempDict[key] == valMin]
remove_list = []
for key, value in tempDict.items():
if jobsR[0][1] in key[1]:
remove_list.append(key)
for item in remove_list:
tempDict.pop(item)
for x in jobsR:
#print(x[0])
if x[0] == 'M1':
l1.append(item[1])
else:
l2.append(item[1])
【问题讨论】:
【参考方案1】:列表 l1 和 l2 在 while 循环的每个循环中都设置为 [ ]。在 while 循环之外声明 l1 和 l2 以获得预期的输出。
【讨论】:
【参考方案2】:您需要将l1
和l2
从while 循环中取出,并随时弹出键:
l1 = []
l2 = []
while tempDict:
min_val = min(tempDict.values())
jobsR = [k for k,v in tempDict.items() if v==min_val][0]
if jobsR[0] == 'M1':
l1.append(jobsR[1])
else:
l2.append(jobsR[1])
for k in tempDict:
if k[1]==jobsR[1]]:
tempDict.pop(k)
输出:
# l1 = ['P3', 'P1']
# l2 = ['P2']
注意:这假设每个最小值都有一个唯一的键。
【讨论】:
以上是关于遍历python字典并在两个列表中附加关键组件的主要内容,如果未能解决你的问题,请参考以下文章
根据附加的字典列表在 df 中创建新列并遍历字典 Pandas 列表