Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将已排序列表重新映射到字典_Python_Sorting_Dictionary_List Comprehension - Fatal编程技术网

Python 将已排序列表重新映射到字典

Python 将已排序列表重新映射到字典,python,sorting,dictionary,list-comprehension,Python,Sorting,Dictionary,List Comprehension,我已经将页面ID映射到了支持者ID。我将它们分为名为化身的列表和非化身的列表,因为我希望它们分别按照有化身和没有化身的列表进行排序,并且我还希望按照['user']['supported\u date']对它们进行排序 这是我的原始数据记录: pages = { 274: { 1307: { 'support': 1, 'profile_id': 1307, 'id': 16,

我已经将页面ID映射到了支持者ID。我将它们分为名为
化身的列表
非化身的列表
,因为我希望它们分别按照有化身和没有化身的列表进行排序,并且我还希望按照
['user']['supported\u date']
对它们进行排序

这是我的原始数据记录:

pages = {
    274: {
        1307: {
            'support': 1,
            'profile_id': 1307,
            'id': 16,
            'user': {
                'first_name': 'robot10',
                'photo': '/static/images/avatars/avatar-male-100.png',
                'supported_date': '2014-11-18 19:56:35.961452+00:00',
                'id': 1307,
            },
        },
        1298: {
            'support': 1,
            'profile_id': 1298,
            'id': 19,
            'user': {
                'first_name': 'robot1',
                'photo': '/user_photos/01/f2/01f236a6a15fee6153f834010deafffa.png',
                'supported_date': '2014-12-12 22:28:35.262345+00:00',
                'id': 1298,
            },
        },
        1299: {
            'support': 1,
            'profile_id': 1299,
            'id': 24,
            'user': {
                'first_name': 'robot2',
                'photo': '/user_photos/da/ea/daea1c07bc50568fab0462327b66c251.png',
                'supported_date': '2014-12-12 22:28:54.382168+00:00',
                'id': 1299,
            },
        },
        1300: {
            'support': 1,
            'profile_id': 1300,
            'id': 29,
            'user': {
                'first_name': 'robot3',
                'photo': '/static/images/avatars/avatar-male-100.png',
                'supported_date': '2014-12-12 22:30:53.800588+00:00',
                'id': 1300,
            },
        },
        1302: {
            'support': 1,
            'profile_id': 1302,
            'id': 35,
            'user': {
                'first_name': 'robot5',
                'photo': '/user_photos/24/35/24351b2c4cf99723c7a04b9bbf5706cb.png',
                'supported_date': '2014-12-12 22:31:14.376383+00:00',
                'id': 1302,
            },
        },
    },
    347: {1298: {
        'support': 1,
        'profile_id': 1298,
        'id': 23,
        'user': {
            'first_name': 'robot1',
            'photo': '/user_photos/01/f2/01f236a6a15fee6153f834010deafffa.png',
            'supported_date': '2014-12-12 22:28:38.751230+00:00',
            'id': 1298,
        },
    }, 1299: {
        'support': 1,
        'profile_id': 1299,
        'id': 28,
        'user': {
            'first_name': 'robot2',
            'photo': '/user_photos/da/ea/daea1c07bc50568fab0462327b66c251.png',
            'supported_date': '2014-12-12 22:30:04.421848+00:00',
            'id': 1299,
        },
    }, 1300: {
        'support': 1,
        'profile_id': 1300,
        'id': 33,
        'user': {
            'first_name': 'robot3',
            'photo': '/static/images/avatars/avatar-male-100.png',
            'supported_date': '2014-12-12 22:30:55.968285+00:00',
            'id': 1300,
        },
    }},
    348: {
        1298: {
            'support': 1,
            'profile_id': 1298,
            'id': 20,
            'user': {
                'first_name': 'robot1',
                'photo': '/user_photos/01/f2/01f236a6a15fee6153f834010deafffa.png',
                'supported_date': '2014-12-12 22:28:35.855000+00:00',
                'id': 1298,
            },
        },
        1299: {
            'support': 1,
            'profile_id': 1299,
            'id': 25,
            'user': {
                'first_name': 'robot2',
                'photo': '/user_photos/da/ea/daea1c07bc50568fab0462327b66c251.png',
                'supported_date': '2014-12-12 22:28:56.569903+00:00',
                'id': 1299,
            },
        },
        1300: {
            'support': 1,
            'profile_id': 1300,
            'id': 30,
            'user': {
                'first_name': 'robot3',
                'photo': '/static/images/avatars/avatar-male-100.png',
                'supported_date': '2014-12-12 22:30:54.204695+00:00',
                'id': 1300,
            },
        },
        1302: {
            'support': 1,
            'profile_id': 1302,
            'id': 36,
            'user': {
                'first_name': 'robot5',
                'photo': '/user_photos/24/35/24351b2c4cf99723c7a04b9bbf5706cb.png',
                'supported_date': '2014-12-12 22:31:19.885209+00:00',
                'id': 1302,
            },
        },
    },
    278: {
        1298: {
            'support': 1,
            'profile_id': 1298,
            'id': 21,
            'user': {
                'first_name': 'robot1',
                'photo': '/user_photos/01/f2/01f236a6a15fee6153f834010deafffa.png',
                'supported_date': '2014-12-12 22:28:36.780765+00:00',
                'id': 1298,
            },
        },
        1299: {
            'support': 1,
            'profile_id': 1299,
            'id': 26,
            'user': {
                'first_name': 'robot2',
                'photo': '/user_photos/da/ea/daea1c07bc50568fab0462327b66c251.png',
                'supported_date': '2014-12-12 22:28:57.598403+00:00',
                'id': 1299,
            },
        },
        1300: {
            'support': 1,
            'profile_id': 1300,
            'id': 31,
            'user': {
                'first_name': 'robot3',
                'photo': '/static/images/avatars/avatar-male-100.png',
                'supported_date': '2014-12-12 22:30:54.979874+00:00',
                'id': 1300,
            },
        },
        1302: {
            'support': 1,
            'profile_id': 1302,
            'id': 34,
            'user': {
                'first_name': 'robot5',
                'photo': '/user_photos/24/35/24351b2c4cf99723c7a04b9bbf5706cb.png',
                'supported_date': '2014-12-12 22:31:12.505020+00:00',
                'id': 1302,
            },
        },
    },
    279: {1298: {
        'support': 1,
        'profile_id': 1298,
        'id': 22,
        'user': {
            'first_name': 'robot1',
            'photo': '/user_photos/01/f2/01f236a6a15fee6153f834010deafffa.png',
            'supported_date': '2014-12-12 22:28:37.330745+00:00',
            'id': 1298,
        },
    }, 1299: {
        'support': 1,
        'profile_id': 1299,
        'id': 27,
        'user': {
            'first_name': 'robot2',
            'photo': '/user_photos/da/ea/daea1c07bc50568fab0462327b66c251.png',
            'supported_date': '2014-12-12 22:28:58.149790+00:00',
            'id': 1299,
        },
    }, 1300: {
        'support': 1,
        'profile_id': 1300,
        'id': 32,
        'user': {
            'first_name': 'robot3',
            'photo': '/static/images/avatars/avatar-male-100.png',
            'supported_date': '2014-12-12 22:30:55.475817+00:00',
            'id': 1300,
        },
    }},
}
然后,我循环浏览dict页面,拿出有头像的支持者,并将他们放入自己的列表中。我也把那些没有化身的人放进了他们自己的名单

avatars = []
non_avatars = []
for pid, page_supporters in pages.items():
    for supporter_id, page_supporter in page_supporters.items():
        page_supporter['page_id'] = pid
        if 'user_photos' in page_supporter['user']['photo']:
            avatars.append(page_supporter)
        else:
            non_avatars.append(page_supporter)
现在我按照用户支持的日期对它们进行排序

# Sort all avatars by user supported date
avatars = sorted(avatars, key=lambda supporter: supporter['user']['supported_date'], reverse=True)

# Do the same for the non avatars
non_avatars = sorted(non_avatars, key=lambda supporter: supporter['user']['supported_date'], reverse=True)
最后将它们重新组合成一个列表

# These are now supported by those who have avatars first and their supported date DESC
combined_supporters = avatars + non_avatars
从这里开始,我需要重新创建原始词典。我试图更新,但它一直覆盖以前的值。我想我需要使用
setdefault
,但我不能完全确定


既然python字典没有“排序”,我如何将我的
组合列表重新转换为与
页面相同的结构实体一个技巧是将数据存储在字典中,然后使用元组的排序列表,这些元组由要排序的项和获取要查找的其余数据所需的键或访问方法组成。请注意,在python中进行排序时,您可以选择提供cmp运算符和键函数,这些运算符和键函数允许等价于
如果您需要维护排序,则必须将页面字典替换为;这些跟踪插入顺序和所有迭代然后重复该顺序:

from collections import OrderedDict

# replace existing pages dict with a new one maintaining ordering
pages = {page_id: OrderedDict() for page_id in pages}

for supporter in combined_supporters:
    page_id = supporter.pop('page_id')
    pages[page_id][supporter['profile_id']] = supporter
根据您的设置,这将产生:

>>> from collections import OrderedDict
>>> pages = {page_id: OrderedDict() for page_id in pages}
>>> for supporter in combined_supporters:
...     page_id = supporter.pop('page_id')
...     pages[page_id][supporter['profile_id']] = supporter
... 
>>> from pprint import pprint
>>> pprint(pages)
{274: OrderedDict([(1302, {'support': 1, 'profile_id': 1302, 'id': 35, 'user': {'photo': '/user_photos/24/35/24351b2c4cf99723c7a04b9bbf5706cb.png', 'first_name': 'robot5', 'supported_date': '2014-12-12 22:31:14.376383+00:00', 'id': 1302}}), (1299, {'support': 1, 'profile_id': 1299, 'id': 24, 'user': {'photo': '/user_photos/da/ea/daea1c07bc50568fab0462327b66c251.png', 'first_name': 'robot2', 'supported_date': '2014-12-12 22:28:54.382168+00:00', 'id': 1299}}), (1298, {'support': 1, 'profile_id': 1298, 'id': 19, 'user': {'photo': '/user_photos/01/f2/01f236a6a15fee6153f834010deafffa.png', 'first_name': 'robot1', 'supported_date': '2014-12-12 22:28:35.262345+00:00', 'id': 1298}}), (1300, {'support': 1, 'profile_id': 1300, 'id': 29, 'user': {'photo': '/static/images/avatars/avatar-male-100.png', 'first_name': 'robot3', 'supported_date': '2014-12-12 22:30:53.800588+00:00', 'id': 1300}}), (1307, {'support': 1, 'profile_id': 1307, 'id': 16, 'user': {'photo': '/static/images/avatars/avatar-male-100.png', 'first_name': 'robot10', 'supported_date': '2014-11-18 19:56:35.961452+00:00', 'id': 1307}})]),
 278: OrderedDict([(1302, {'support': 1, 'profile_id': 1302, 'id': 34, 'user': {'photo': '/user_photos/24/35/24351b2c4cf99723c7a04b9bbf5706cb.png', 'first_name': 'robot5', 'supported_date': '2014-12-12 22:31:12.505020+00:00', 'id': 1302}}), (1299, {'support': 1, 'profile_id': 1299, 'id': 26, 'user': {'photo': '/user_photos/da/ea/daea1c07bc50568fab0462327b66c251.png', 'first_name': 'robot2', 'supported_date': '2014-12-12 22:28:57.598403+00:00', 'id': 1299}}), (1298, {'support': 1, 'profile_id': 1298, 'id': 21, 'user': {'photo': '/user_photos/01/f2/01f236a6a15fee6153f834010deafffa.png', 'first_name': 'robot1', 'supported_date': '2014-12-12 22:28:36.780765+00:00', 'id': 1298}}), (1300, {'support': 1, 'profile_id': 1300, 'id': 31, 'user': {'photo': '/static/images/avatars/avatar-male-100.png', 'first_name': 'robot3', 'supported_date': '2014-12-12 22:30:54.979874+00:00', 'id': 1300}})]),
 279: OrderedDict([(1299, {'support': 1, 'profile_id': 1299, 'id': 27, 'user': {'photo': '/user_photos/da/ea/daea1c07bc50568fab0462327b66c251.png', 'first_name': 'robot2', 'supported_date': '2014-12-12 22:28:58.149790+00:00', 'id': 1299}}), (1298, {'support': 1, 'profile_id': 1298, 'id': 22, 'user': {'photo': '/user_photos/01/f2/01f236a6a15fee6153f834010deafffa.png', 'first_name': 'robot1', 'supported_date': '2014-12-12 22:28:37.330745+00:00', 'id': 1298}}), (1300, {'support': 1, 'profile_id': 1300, 'id': 32, 'user': {'photo': '/static/images/avatars/avatar-male-100.png', 'first_name': 'robot3', 'supported_date': '2014-12-12 22:30:55.475817+00:00', 'id': 1300}})]),
 347: OrderedDict([(1299, {'support': 1, 'profile_id': 1299, 'id': 28, 'user': {'photo': '/user_photos/da/ea/daea1c07bc50568fab0462327b66c251.png', 'first_name': 'robot2', 'supported_date': '2014-12-12 22:30:04.421848+00:00', 'id': 1299}}), (1298, {'support': 1, 'profile_id': 1298, 'id': 23, 'user': {'photo': '/user_photos/01/f2/01f236a6a15fee6153f834010deafffa.png', 'first_name': 'robot1', 'supported_date': '2014-12-12 22:28:38.751230+00:00', 'id': 1298}}), (1300, {'support': 1, 'profile_id': 1300, 'id': 33, 'user': {'photo': '/static/images/avatars/avatar-male-100.png', 'first_name': 'robot3', 'supported_date': '2014-12-12 22:30:55.968285+00:00', 'id': 1300}})]),
 348: OrderedDict([(1302, {'support': 1, 'profile_id': 1302, 'id': 36, 'user': {'photo': '/user_photos/24/35/24351b2c4cf99723c7a04b9bbf5706cb.png', 'first_name': 'robot5', 'supported_date': '2014-12-12 22:31:19.885209+00:00', 'id': 1302}}), (1299, {'support': 1, 'profile_id': 1299, 'id': 25, 'user': {'photo': '/user_photos/da/ea/daea1c07bc50568fab0462327b66c251.png', 'first_name': 'robot2', 'supported_date': '2014-12-12 22:28:56.569903+00:00', 'id': 1299}}), (1298, {'support': 1, 'profile_id': 1298, 'id': 20, 'user': {'photo': '/user_photos/01/f2/01f236a6a15fee6153f834010deafffa.png', 'first_name': 'robot1', 'supported_date': '2014-12-12 22:28:35.855000+00:00', 'id': 1298}}), (1300, {'support': 1, 'profile_id': 1300, 'id': 30, 'user': {'photo': '/static/images/avatars/avatar-male-100.png', 'first_name': 'robot3', 'supported_date': '2014-12-12 22:30:54.204695+00:00', 'id': 1300}})])}
稍微重新格式化输出:

pages = {
    274: OrderedDict([
        (
            1302, {
                'support': 1,
                'profile_id': 1302,
                'id': 35, 
                'user': {
                    'photo': '/user_photos/24/35/24351b2c4cf99723c7a04b9bbf5706cb.png',
                    'first_name': 'robot5', 
                    'supported_date': '2014-12-12 22:31:14.376383+00:00',
                    'id': 1302
                }
            }
        ), 
        (
            1299, {
                'support': 1,
                'profile_id': 1299,
                'id': 24,
                'user': {
                    'photo': '/user_photos/da/ea/daea1c07bc50568fab0462327b66c251.png',
                    'first_name': 'robot2',
                    'supported_date': '2014-12-12 22:28:54.382168+00:00',
                    'id': 1299
                }
            }
        ),
        (
            1298, {
                'support': 1,
                'profile_id': 1298,
                'id': 19, 
                'user': {
                    'photo': '/user_photos/01/f2/01f236a6a15fee6153f834010deafffa.png',
                    'first_name': 'robot1',
                    'supported_date': '2014-12-12 22:28:35.262345+00:00',
                    'id': 1298
                }
            }
        ), 
        (
            1300, {
                'support': 1,
                'profile_id': 1300,
                'id': 29,
                'user': {
                    'photo': '/static/images/avatars/avatar-male-100.png',
                    'first_name': 'robot3',
                    'supported_date': '2014-12-12 22:30:53.800588+00:00',
                    'id': 1300
                }
            }
        ), 
        (
            1307, {
                'support': 1,
                'profile_id': 1307,
                'id': 16, 
                'user': {
                    'photo': '/static/images/avatars/avatar-male-100.png',
                    'first_name': 'robot10',
                    'supported_date': '2014-11-18 19:56:35.961452+00:00',
                    'id': 1307
                }
            }
        )
    ]),
    278: OrderedDict([
        (
            1302, {
                'support': 1,
                'profile_id': 1302,
                'id': 34,
                'user': {
                    'photo': '/user_photos/24/35/24351b2c4cf99723c7a04b9bbf5706cb.png',
                    'first_name': 'robot5',
                    'supported_date': '2014-12-12 22:31:12.505020+00:00',
                    'id': 1302
                }
            }
        ),
        (
            1299, {
                'support': 1,
                'profile_id': 1299,
                'id': 26,
                'user': {
                    'photo': '/user_photos/da/ea/daea1c07bc50568fab0462327b66c251.png',
                    'first_name': 'robot2',
                    'supported_date': '2014-12-12 22:28:57.598403+00:00',
                    'id': 1299
                }
            }
        ),
        (
            1298, {
                'support': 1,
                'profile_id': 1298,
                'id': 21,
                'user': {
                    'photo': '/user_photos/01/f2/01f236a6a15fee6153f834010deafffa.png',
                    'first_name': 'robot1',
                    'supported_date': '2014-12-12 22:28:36.780765+00:00',
                    'id': 1298
                }
            }
        ),
        (
            1300, {
                'support': 1,
                'profile_id': 1300,
                'id': 31,
                'user': {
                    'photo': '/static/images/avatars/avatar-male-100.png',
                    'first_name': 'robot3',
                    'supported_date': '2014-12-12 22:30:54.979874+00:00',
                    'id': 1300
                }
            }
        )
    ]),
    279: OrderedDict([
        (
            1299, {
                'support': 1,
                'profile_id': 1299,
                'id': 27,
                'user': {
                    'photo': '/user_photos/da/ea/daea1c07bc50568fab0462327b66c251.png',
                    'first_name': 'robot2',
                    'supported_date': '2014-12-12 22:28:58.149790+00:00',
                    'id': 1299
                }
            }
        ),
        (
            1298, {
                'support': 1,
                'profile_id': 1298,
                'id': 22,
                'user': {
                    'photo': '/user_photos/01/f2/01f236a6a15fee6153f834010deafffa.png',
                    'first_name': 'robot1',
                    'supported_date': '2014-12-12 22:28:37.330745+00:00',
                    'id': 1298
                }
            }
        ),
        (
            1300, {
                'support': 1,
                'profile_id': 1300,
                'id': 32,
                'user': {
                    'photo': '/static/images/avatars/avatar-male-100.png',
                    'first_name': 'robot3',
                    'supported_date': '2014-12-12 22:30:55.475817+00:00',
                    'id': 1300
                }
            }
        )
    ]),
    347: OrderedDict([
        (
             1299, {
                'support': 1,
                'profile_id': 1299,
                'id': 28,
                'user': {
                    'photo': '/user_photos/da/ea/daea1c07bc50568fab0462327b66c251.png',
                    'first_name': 'robot2',
                    'supported_date': '2014-12-12 22:30:04.421848+00:00',
                    'id': 1299
                }
            }
        ),
        (
            1298, {
                'support': 1,
                'profile_id': 1298,
                'id': 23,
                'user': {
                    'photo': '/user_photos/01/f2/01f236a6a15fee6153f834010deafffa.png',
                    'first_name': 'robot1',
                    'supported_date': '2014-12-12 22:28:38.751230+00:00',
                    'id': 1298
                }
            }
        ),
        (
            1300, {
                'support': 1,
                'profile_id': 1300,
                'id': 33,
                'user': {
                    'photo': '/static/images/avatars/avatar-male-100.png',
                    'first_name': 'robot3',
                    'supported_date': '2014-12-12 22:30:55.968285+00:00',
                    'id': 1300
                }
            }
        )
    ]),
    348: OrderedDict([
        (
            1302, {
                'support': 1,
                'profile_id': 1302,
                'id': 36,
                'user': {
                    'photo': '/user_photos/24/35/24351b2c4cf99723c7a04b9bbf5706cb.png',
                    'first_name': 'robot5',
                    'supported_date': '2014-12-12 22:31:19.885209+00:00',
                    'id': 1302
                }
            }
        ),
        (
            1299, {
                'support': 1,
                'profile_id': 1299,
                'id': 25,
                'user': {
                    'photo': '/user_photos/da/ea/daea1c07bc50568fab0462327b66c251.png',
                    'first_name': 'robot2',
                    'supported_date': '2014-12-12 22:28:56.569903+00:00',
                    'id': 1299
                }
            }
        ),
        (
            1298, {
                'support': 1,
                'profile_id': 1298,
                'id': 20,
                'user': {
                    'photo': '/user_photos/01/f2/01f236a6a15fee6153f834010deafffa.png',
                    'first_name': 'robot1',
                    'supported_date': '2014-12-12 22:28:35.855000+00:00',
                    'id': 1298
                }
            }
        ),
        (
            1300, {
                'support': 1,
                'profile_id': 1300,
                'id': 30,
                'user': {
                    'photo': '/static/images/avatars/avatar-male-100.png',
                    'first_name': 'robot3',
                    'supported_date': '2014-12-12 22:30:54.204695+00:00',
                    'id': 1300
                }
            }
        )
    ])
}

“在Python中,我知道我不能对dict排序,”-实际上你可以。通过也许这就是方法?所以你需要在同一个页面ID上再次划分你的分类支持者?很好,谢谢!以前从未使用过OrderedICT,但它确实起到了作用。如果允许的话,我会给你赏金的。