为了账号安全,请及时绑定邮箱和手机立即绑定

如何根据字典键在文件中的出现对它们进行排序

如何根据字典键在文件中的出现对它们进行排序

凤凰求蛊 2024-01-16 15:11:05
我知道字典是一种无序数据类型,但可以使用该sorted()函数按字母顺序排序。但是,我想知道是否绝对不可能根据字典的键在文件中的出现对它们进行排序。例如,我想从 txt 文件中提取水果名称并将它们映射到行号和时间戳。生成的字典如下所示:mydict = {    'orange': [['1', '00:00:03,950'],  # 'fruit': [['line number', 'timestamp']]         ['9', '00:00:24,030'],          ['11', '00:00:29,640']],      'cherry': [['20', '00:00:54,449']],      'apple': [['14', '00:00:38,629']],     'banana': [['2', '00:00:06,840'],            ['3', '00:00:09,180'],           ['4', '00:00:10,830']],}现在,我想根据键在文件中的出现对它们进行排序,即按它们作为值的第一个列表项的行号升序。所以期望的输出是:{'orange': [['1', '00:00:03,950'],         ['9', '00:00:24,030'],          ['11', '00:00:29,640']],  'banana': [['2', '00:00:06,840'],  # changed          ['3', '00:00:09,180'],           ['4', '00:00:10,830']]}  'apple': [['14', '00:00:38,629']], 'cherry': [['20', '00:00:54,449']]}  # changed如果您认为这是一个愚蠢的问题,因为由于字典的无序性质,这是不可能的,您可以对此发表评论,然后我将删除这个问题。不过,我很感谢您的帮助和澄清。
查看完整描述

1 回答

?
临摹微笑

TA贡献1982条经验 获得超2个赞

如果你想对与每个水果相关的排序list,你可以执行以下操作:


>>> mydict = {k : sorted(v, key=lambda x : int(x[0])) for k, v in mydict.items()}

>>> mydict


{'orange': [['1', '00:00:03,950'],

            ['9', '00:00:24,030'],

            ['11', '00:00:29,640']],

 'cherry': [['20', '00:00:54,449']],

 'apple': [['14', '00:00:38,629']],

 'banana': [['2', '00:00:06,840'],

            ['3', '00:00:09,180'],

            ['4', '00:00:10,830']]}

这是迭代字典的键值对,并按每个值的int第一个元素对每个值的元素进行排序。


但要明确的是,从 Python 3.7 开始,法线dict是有序的。所以在这里,您会看到水果名称的出现顺序与它们创建时的顺序相同 - 在早期的 Python 中,情况并非如此。


您还说您想要对键(水果名称)进行排序,但看起来您想要对值(行号和时间戳)进行排序。如果您想对水果名称进行额外排序,您可以拨打sorted电话来获取项目:


>>> mydict = {k : sorted(v, key=lambda x : int(x[0])) for k, v in sorted(mydict.items())}

>>> mydict


{'apple': [['14', '00:00:38,629']],

 'banana': [['2', '00:00:06,840'],

            ['3', '00:00:09,180'],

            ['4', '00:00:10,830']],

 'cherry': [['20', '00:00:54,449']],

 'orange': [['1', '00:00:03,950'],

            ['9', '00:00:24,030'],

            ['11', '00:00:29,640']]}


# now mydict's keys are in alphabetical order, and its values are also ordered by line number



查看完整回答
反对 回复 2024-01-16
  • 1 回答
  • 0 关注
  • 101 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信