我有一个JSON文件,看起来像这样:
[{'data': [{'text': 'add '},
{'text': 'Stani, stani Ibar vodo', 'entity': 'entity_name'},
{'text': ' songs in '},
{'text': 'my', 'entity': 'playlist_owner'},
{'text': ' playlist '},
{'text': 'música libre', 'entity': 'playlist'}]},
{'data': [{'text': 'add this '},
{'text': 'album', 'entity': 'music_item'},
{'text': ' to '},
{'text': 'my', 'entity': 'playlist_owner'},
{'text': ' '},
{'text': 'Blues', 'entity': 'playlist'},
{'text': ' playlist'}]},
{'data': [{'text': 'Add the '},
{'text': 'tune', 'entity': 'music_item'},
{'text': ' to the '},
{'text': 'Rage Radio', 'entity': 'playlist'},
{'text': ' playlist.'}]}]
我想为这个列表中的每个“数据”附加“文本”中的值。
我尝试了以下方法:
lst = []
for item in data:
p = item['data']
p_st = ''
for item_1 in p:
p_st += item_1['text'] + ' '
lst.append(p_st)
print(lst)
Out: ['add Stani, stani Ibar vodo songs in my playlist música libre ', 'add this album to my Blues playlist ', 'Add the tune to the Rage Radio playlist. ']
它可以工作,但我是JSON的新手,我想知道是否有更好的方法来做到这一点?可能是JSON的一些内置方法或库?
3条答案
按热度按时间0ve6wy6x1#
您的代码可以很好地从JSON数据中提取文本值。但是,如果你想要一种更简洁的方式来实现相同的结果,你可以在Python中使用列表解析,这可以使你的代码更短,更可读。你可以这样做:
使用JSON模块和列表解析:
使用pandas:
如果您计划对JSON数据执行额外的数据分析或操作,则pandas方法更适合,因为它提供了一种强大而灵活的方式来处理结构化数据。
y3bcpkx12#
这里没有特殊的JSON工具可以帮助你,因为你已经解析了JSON,并且有了普通的Python
dict
s和list
s和str
s(不,解析过程不能以任何简单的方式修改来做你想要的事情,这应该在解析之后完成)。也就是说,你的代码是不习惯的,并且有一些效率低下的地方(CPython * 试图 * 帮助解决这些问题,但是对
str
的重复连接的优化是脆弱的,不可移植的,并且仍然比正确使用str.join
更糟糕)。改进后的代码看起来像这样:它使用列表解析来生成外部列表,其中生成的每个元素都是
item
的'data'
的所有'text'
值的空格分隔连接。在外部使用一个listcomp使事情变得更快(这是一个微优化,利用了listcomp的解释器优化,但它不是大O改进)。' '.join
* 的使用是 * 一个大O算法的改进;重复的字符串连接是O(n²)
(CPython将其优化为几乎O(n)
* 有时 *,但不是那么好,并且不可靠),而通过' '.join
的批量连接是保证O(n)
。如果你的数据只是少量的字符串,如图所示,差异可能可以忽略不计,但代码更简单,更容易阅读/维护。如果数据有 * 许多 * 字符串要连接,这可能会显着提高速度。注意:这意味着连接的字符串不会以空格结尾。很有可能你并不想要那个尾随的空格,但是如果你真的想要的话,你总是可以把它加回去的;一个额外的连接不会毁了大O
b1uwtaje3#
这将工作: