如何将相同的键值字典拆分成字典列表,而这些字典中的那些相等的键位于不同的列表中?

时间:2019-08-05 16:35:32

标签: python dictionary

基本上,我想将列表消息中的所有词典用相同的键(name)分组到不同的列表中。我应该如何进行?

我当时正在考虑进行某种两个循环,但是似乎没有任何作用。

messages={('name': FLR345, 'latitude': 34.244, 'longitude': -23.564), ('name': FLR33, 'latitude': 34.24432, 'longitude': -24.53),('name': FLR345, 'latitude': 35.244, 'longitude': -26.564), ('name': FLR31, 'latitude': 30.244, 'longitude': -22.564)}

我想要这样的东西

Drone1={('name': FLR345, 'latitude': 34.244, 'longitude': -23.564),'name': FLR345, 'latitude': 35.244, 'longitude': -26.564)}
Drone2={('name': FLR33, 'latitude': 34.24432, 'longitude': -24.53)}
Drone3={('name': FLR31, 'latitude': 30.244, 'longitude': -22.564)}
def split
for i in range(len(messages))
    for j in range(len(messages))
        if .......
        Dronei=....

1 个答案:

答案 0 :(得分:0)

尽管我没有完全理解您的message数据结构,但我根据您的描述做出了一个假设,即它可能是一个包含字典作为元素的元组(反之亦然,这就是您的问题所包含的内容)。如果是这种情况,下面的解决方案可能会起作用,尽管您可能需要进行一些更改,但是这个想法看起来很好:

  1. 将不同的名称映射到组名称,并从中形成字典,例如“ FLR345”到“ Drone0”,“ FLR33”到“ Drone1”等
  2. 浏览消息元组中的每个元素,查看名称是否已分配了一个组
  3. 如果已分配,只需将消息字典元素附加到该组
  4. 否则将它们添加为新条目

    messages = ({'name': 'FLR345', 'latitude': 34.244, 'longitude': -23.564},
            {'name': 'FLR33', 'latitude': 34.24432, 'longitude': -24.53},
            {'name': 'FLR345', 'latitude': 35.244, 'longitude': -26.564},
            {'name': 'FLR31', 'latitude': 30.244, 'longitude': -22.564})
    messages_grouped = {}
    name_to_message_group = {}
    for i in range(len(messages)):
        #check if the current message name has a group assigned
         if messages[i]['name'] in  name_to_message_group.keys():
             #if yes, append the current message to existing group
             messages_grouped[name_to_message_group[messages[i]['name']]] += (messages[i],)
         else:
             #else add the name to group mapping first
            name_to_message_group[messages[i]['name']] = 'Drone' + str(i)
            #then add the group and message as new elements
            messages_grouped['Drone' + str(i)] = tuple()
            messages_grouped['Drone' + str(i)] += (messages[i],)
    print (messages_grouped)