从多个词典检索数据

2024-04-26 06:02:42 发布

您现在位置:Python中文网/ 问答频道 /正文

有三种词典: 卡车、物品和装载的卡车

如何替换Trucks和Items字典中的truck键和值?你知道吗

truck_dic = {6: [21.0, 7.0, 7.0],
             7: [23.0, 7.0, 7.0],
             8: [27.0, 7.0, 7.0],
             9: [20.0, 7.0, 7.0],
            10: [24.0, 7.0, 7.0],
            11: [28.0, 8.0, 8.0],
            12: [32.0, 8.0, 8.0],
            13: [32.0, 9.0, 10.0],
            14: [32.0, 9.0, 10.0],
            15: [20.0, 8.0, 8.0],
            16: [20.0, 8.0, 8.0]}

Items_dic = {0: [4.6, 4.3, 4.3],
 1: [4.6, 4.3, 4.3],
 2: [6.0, 5.6, 9.0],
 3: [8.75, 5.6, 6.6],
 4: [6.0, 5.16, 6.6],
 5: [6.0, 5.6, 9.0],
 6: [8.75, 5.6, 6.6],
 7: [4.6, 4.3, 4.3],
 8: [6.0, 5.6, 9.0],
 9: [8.75, 5.6, 6.6],
 10: [6.0, 5.16, 6.6]}

loaded_trucks = {'23.0x7.0x7.0': ['4.60x4.30x4.30, 4.60x4.30x4.30, 
                                  6.60x6.00x5.16, 6.60x6.00x5.16'],
                 '27.0x7.0x7.0': ['4.60x4.30x4.30, 9.00x6.00x5.60, 
                                   8.75x6.60x5.60'],
                 '20.0x8.0x8.0': ['9.00x6.00x5.60, 8.75x6.60x5.60'],
                 '21.0x7.0x7.0': ['9.00x6.00x5.60, 8.75x6.60x5.60']}

以至于它

loaded_trucks = {'7': ['0', '7', '4', '10'],
                 '8': ['1', '5', '9'],
                 '16': ['2', '3'],
                 '6': ['6', '8']}

PS:装载的卡车尺寸混乱


Tags: 字典尺寸items物品词典psdicloaded
1条回答
网友
1楼 · 发布于 2024-04-26 06:02:42
truck_dic = {6: [21.0, 7.0, 7.0],
             7: [23.0, 7.0, 7.0],
             8: [27.0, 7.0, 7.0],
             9: [20.0, 7.0, 7.0],
            10: [24.0, 7.0, 7.0],
            11: [28.0, 8.0, 8.0],
            12: [32.0, 8.0, 8.0],
            13: [32.0, 9.0, 10.0],
            14: [32.0, 9.0, 10.0],
            15: [20.0, 8.0, 8.0],
            16: [20.0, 8.0, 8.0]}

Items_dic = {0: [4.6, 4.3, 4.3],
 1: [4.6, 4.3, 4.3],
 2: [6.0, 5.6, 9.0],
 3: [8.75, 5.6, 6.6],
 4: [6.0, 5.16, 6.6],
 5: [6.0, 5.6, 9.0],
 6: [8.75, 5.6, 6.6],
 7: [4.6, 4.3, 4.3],
 8: [6.0, 5.6, 9.0],
 9: [8.75, 5.6, 6.6],
 10: [6.0, 5.16, 6.6]}

loaded_trucks = {'23.0x7.0x7.0': ['4.60x4.30x4.30, 4.60x4.30x4.30, 6.60x6.00x5.16, 6.60x6.00x5.16'],
                 '27.0x7.0x7.0': ['4.60x4.30x4.30, 9.00x6.00x5.60, 8.75x6.60x5.60'],
                 '20.0x8.0x8.0': ['9.00x6.00x5.60, 8.75x6.60x5.60'],
                 '21.0x7.0x7.0': ['9.00x6.00x5.60, 8.75x6.60x5.60']}

# Build dimensions to truck and item mappings
truck_dict = {tuple(sorted(v)): str(k) for k, v in truck_dic.items()}

items_dict = dict()
for k, v in Items_dic.items():
    items_dict.setdefault(tuple(sorted(v)), []).append(str(k))

# Generate result
result = dict()
def standardize(s):
    return tuple(sorted(float(v) for v in s.split('x')))

for k, v in loaded_trucks.items():
    # Note that the values in loaded_trucks are lists of a ONE str
    # and not a list of strs of dimensions.
    items = v[0].split(',')
    items = [i.strip() for i in items]

    print(items)
    print([standardize(i) for i in items])
    k = standardize(k)
    result[truck_dict[k]] = [items_dict[standardize(i)].pop() for i in items]

输出result

{'7': ['7', '1', '10', '4'],
 '8': ['0', '8', '9'],
 '16': ['5', '6'],
 '6': ['2', '3']}

请注意,具有相同尺寸的项目可以互换。例如,第5项和第8项的尺寸相同,因此可以互换。你知道吗

另外,我们也不关心是否重新排列了各个维度的顺序,因为这只意味着项目是旋转的。例如,尺寸为“4.60x4.30x4.30”的项目被视为与另一个尺寸为“4.30x4.30x4.60”的项目相同。你知道吗

最后,每个项只分配一次,但我们假设原始loaded_trucks字典中的项都在Items_dic中,因此不会出现短缺或剩余项,否则从列表中弹出将产生错误。你知道吗

相关问题 更多 >