【问题标题】:Python extracting right data from nested dictionaryPython从嵌套字典中提取正确的数据
【发布时间】: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 是在哪里定义的?

标签: python json sqlite


【解决方案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 的编码方式。非常感谢您的帮助:)
  • 很高兴它对您有所帮助。如果这是您需要的全部答案,您可能希望接受它作为答案:) stackoverflow.com/help/someone-answers
猜你喜欢
  • 1970-01-01
  • 2021-08-24
  • 2021-02-12
  • 2018-04-20
  • 1970-01-01
  • 2023-03-20
  • 2016-05-15
  • 2021-04-19
  • 1970-01-01
相关资源
最近更新 更多