我有下面的字典,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,则i发现jobsR as ('M1', 'P3')
.I希望删除“P3”从tempDict中出现的所有键。
我将迭代地从这个字典中找到最小值,并删除相应的键。由于键是有序对的,如果离开的键元素有第一个分量M1
,那么我将在l2
中的list l1
else中取第二个组件。我将继续下去,直到字典空空如也。我的代码是,
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])
发布于 2021-12-04 04:52:15
lists、l1和l2在while循环的每个循环中都会被设置。在while循环之外声明l1和l2以获得预期的输出。
发布于 2021-12-04 08:57:43
您需要在执行过程中将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']
注意:这假设每个最小值都有一个唯一的键。
https://stackoverflow.com/questions/70225562
复制相似问题