Python从嵌套字典中提取正确的数据

Posted

技术标签:

【中文标题】Python从嵌套字典中提取正确的数据【英文标题】:Python extracting right data from nested dictionary 【发布时间】:2021-10-29 22:37:12 【问题描述】:

我使用 sqlite3 创建了一个名为“entities_data”的数据库

import sqlite3
conn = sqlite3.connect('entities_data.sqlite')
cur = conn.cursor()
cur.execute('DROP TABLE IF EXISTS entities')
cur.execute('''
    CREATE TABLE entities (
        id INTEGER PRIMARY KEY, tweet_id INTEGER, type TEXT, 
        value INTEGER, start_index INTEGER, end_index INTEGER, FOREIGN KEY (tweet_id) REFERENCES tweets (id))
''')
conn.close()

我有一个记录所有推文的 JSON 文件数据库,它的简化版本只有 2 条推文看起来像这样

[ "id_1" : "123", "created_at" : "monday", "tweet_text" : "#hi my name is john", "entities": "hashtags": ["text": "hi", "indices": [0, 2]], "symbols": [], "user_mentions": [], "urls": ["url": "link_1",[211, 234]]

"id_2" : "456", "created_at" : "tuesday", "tweet_text" : "#food i am eating now", "entities": "hashtags": ["text": "food", "indices": [0, 5]], "symbols": [], "user_mentions": [], "urls": [], "media": "img_1" ]

有了这个,我只想在实体键中有值时才从实体键中取出键。比如在id_1中,会拉出["hashtags", "urls],而id_2会拉出["hashtags", "media"]。

使用下面的代码,我设法提取了“实体”中的所有键,但是由于它们是 str 对象,所以我不断收到错误消息。

conn = sqlite3.connect('entities_data.sqlite')
cur = conn.cursor()
for records in data:
    for entity in records['entities']:
        print(entity)

【问题讨论】:

请分享完整的错误细节。 data 是在哪里定义的? 【参考方案1】:

解决方案 1:列表理解

您可以为此使用列表推导

keys_with_values = [
    [key for key, value in item['entities'].items() if value]
    for item in data
]
print(keys_with_values)

输出:

[['hashtags', 'urls'], ['hashtags', 'media']]

方案二:普通for循环

keys_with_values = []

for item in data:
    current_keys = []

    for key, value in item['entities'].items():
        if value:
            current_keys.append(key)

    keys_with_values.append(current_keys)

print(keys_with_values)

输出:

同上

【讨论】:

啊谢谢你这个作品!对不起,我只是一个初学者,但是有没有更简单的方法来编写这个 for 循环? 解决方案 1 对列表推导的使用实际上是最简单的方法,尽管对于初学者来说可能有点复杂。我使用通常的 for 循环添加了替代解决方案 2。它对你也有用吗? 您好,这两种解决方案都非常适合我!谢谢你,从解决方案 2 我将能够理解解决方案 1 的编码方式。非常感谢您的帮助:) 很高兴它对您有所帮助。如果这是您需要的全部答案,您可能希望接受它作为答案:) ***.com/help/someone-answers

以上是关于Python从嵌套字典中提取正确的数据的主要内容,如果未能解决你的问题,请参考以下文章

从熊猫数据框中提取嵌套字典

Python字典嵌套字典排序,该怎么处理?

如何在带有嵌套字典的嵌套循环中正确使用字典“.update”函数[重复]

从嵌套字典中按键提取值

提取嵌套字典python中的所有组合[关闭]

python如何读取嵌套字典里的值?