正在操作此字典以返回所需的输出?

问题描述 投票:0回答:3

我正在使用包含子词典的字典。我想将其转换为可用的格式,以便仅返回所需的值/输出。

编辑-我应该在上下文中添加这是一个短信应用程序。顶级键与特定的“对话”相关,而子键是单独的“消息”。我尝试创建的功能应该能够从作为输入提供的任何给定的“会话”字典中返回最新“消息”的文本。

这里是一个示例词典:

mydict = {1005672: {4461048: {'body': 'Mnow test test', 'msg_id': 4461048},
                    4620511: {'body': 'test sms,test sms', 'msg_id': 4620511},
                    4620584: {'body': 'test sms', 'msg_id': 4620584},
                    4646648: {'body': 'test sms', 'msg_id': 4646648},
                    4646877: {'body': 'test sms', 'msg_id': 4646877},
                    5327736: {'body': 'testing again\r\n', 'msg_id': 5327736},
                    5332767: {'body': 'testing testing 1..2...3...', 'msg_id': 5332767},
                    5333204: {'body': 'testing the convID part...', 'msg_id': 5333204},
                    5333257: {'body': 'take 2!', 'msg_id': 5333257},
                    5333489: {'body': 'aaaaaaaaaaaand ACTION!', 'msg_id': 5333489},
                    5337141: {'body': 'does it work?', 'msg_id': 5337141},
                    5363443: {'body': 'Test', 'msg_id': 5363443},
                    5365638: {'body': 'testing again', 'msg_id': 5365638},
                    5366005: {'body': 'testing sms ID', 'msg_id': 5366005}}}

这使我可以显式返回像这样的特定键(这是一个好的开始):

print(mydict[1005672][5366005])

但是,我需要编写一个仅返回last(或最新)项的“正文”文本的函数。例如,对于此示例,我希望函数返回'testing sms ID'

我想解决的方法是先转换为列表,然后切片?

mylist = list(mydict.values())
myslice = mylist[-1:]

但是,当我这样做时,它不起作用,并且会继续返回整个内容(尽管现在是以列表格式!)

因此,我希望获得有关如何执行此操作的指南-首先将列表切成片段以仅截取最后一行,然后我将如何仅截取''之后的正文之间的文本?

我非常感谢您对此的任何投入。我仍在学习,因此感谢任何有用的提示。谢谢

python python-3.x list
3个回答
0
投票

词典很奇怪。它是嵌套的。最高级别只有一个键/值对。

提取它,然后将包含的字典排序为值,并通过下标/键访问进行操作:

>>> sorted(list(mydict.values())[0].items())[-1][1]["body"]
'testing sms ID'

请注意,除非确保字典的顺序(python 3.6),否则对键进行排序(假设最高的键是最新插入的键)是最佳方法。


0
投票

不是函数,但这是实现此目的的一种方法:

dlookup = {k: max(v.keys()) for k, v in mydict.items()}

myid = 1005672
mydict[myid][dlookup[myid]]['body']

这将输出testing sms ID


0
投票

您可以做这样的事情:

def get_latest(my_dict):
    latest_key = sorted(d.keys())[-1]
    return my_dict[latest_key]["body"]

然后get_latest(mydict[1005672])将返回"testing sms ID"

如果您有多个键,则可以使用字典理解:

my_new_dict = {k: get_latest(mydict[k]) for k in mydict.keys()}

现在top_level_key=1005672; my_new_dict[top_level_key]将返回"testing sms ID"

© www.soinside.com 2019 - 2024. All rights reserved.