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从嵌套字典中提取正确的数据的主要内容,如果未能解决你的问题,请参考以下文章