遍历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】:

您需要将l1l2 从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字典并在两个列表中附加关键组件的主要内容,如果未能解决你的问题,请参考以下文章

遍历 Python 字典并特殊追加到新列表?

python可以同步本地磁盘文件的字典

根据附加的字典列表在 df 中创建新列并遍历字典 Pandas 列表

python无限遍历,实现在多维嵌套字典列表元组的JSON中获取数据

将列表值附加到字典

遍历字典列表并 1) 将流值与流列元素进行比较 2) 如果匹配,则附加一个带有数据的新列表