我正在尝试了解列表的元素和python中JSON数据的输出之间的区别。
我用谷歌搜索了一下,找到了一些答案,但似乎没有一个适合我的场景。
我的代码是
my_new_user_list = json_data.get('0')
print(my_new_user_list)
my_old_user_list = ['user1', 'user2', 'joe', 'doe', 'foo']
diff_list = list(set(my_old_user_list) - set(my_new_user_list))json_data的输出是{'0': "['anonymous', 'joe', 'foo']"}
json_data.get('0')的输出是['anonymous', 'joe', 'foo']
当我尝试获取差异时,它实际上并没有获得两个列表之间的差异,它只是打印my_old_user_list的内容。
如果get('0')返回一个值列表,那么为什么我的脚本不打印两个列表之间的差异。
发布于 2019-05-15 13:59:44
嗯,因为在你的字典里,它看起来像是一个字符串,所以必须使用ast.literal_eval,而不是:
my_new_user_list = json_data.get('0')执行以下操作:
import ast
my_new_user_list = ast.literal_eval(json_data.get('0'))发布于 2019-05-15 13:59:58
json_data.get('0')中的列表不是列表,而是字符串
In [24]: json_data = {'0': "['anonymous', 'joe', 'foo']"}
In [25]: type(json_data.get('0'))
Out[25]: str
In [26]: set(json_data.get('0'))
Out[26]: {' ', "'", ',', '[', ']', 'a', 'e', 'f', 'j', 'm', 'n', 'o', 's', 'u', 'y'}
In [27]: set(['user1', 'user2', 'joe', 'doe', 'foo'])
Out[27]: {'doe', 'foo', 'joe', 'user1', 'user2'}因此,当您在this和my_old_user_list之间设置差异时,您会看到旧的列表,因为这两个列表之间没有公共元素。
一种建议是以正确的方式使用列表定义json_data,如下所示的json_data = {'0': ['anonymous', 'joe', 'foo']}。
请注意,如果您从某个地方获取数据,则此建议不起作用
#Define value as a list
json_data = {'0': ['anonymous', 'joe', 'foo']}
my_new_user_list = json_data.get('0')
my_old_user_list = ['user1', 'user2', 'joe', 'doe', 'foo']
diff_list = list(set(my_old_user_list) - set(my_new_user_list))
print(diff_list)输出将是
['user1', 'user2', 'doe']另一种方法是使用ast.literal_eval将内部字符串解析为列表
(请注意,json.loads将不起作用,因为字符串中有单引号,这将破坏json解析)
如果您要从某个地方获取数据,则此建议应该有效
import ast
json_data = {'0': "['anonymous', 'joe', 'foo']"}
#Use ast.literal_eval to evaluate inner string as a list
my_new_user_list = ast.literal_eval(json_data.get('0'))
my_old_user_list = ['user1', 'user2', 'joe', 'doe', 'foo']
diff_list = list(set(my_old_user_list) - set(my_new_user_list))
print(diff_list)发布于 2019-05-15 14:01:14
json_data = {"0": "['anonymous', 'joe', 'foo']"}清楚地显示您的字典json_data包含字符串形式的值"['anonymous', 'joe', 'foo']"。您可以尝试以下方法来解决您的问题。以下是您问题中提供的示例的工作代码:
from ast import literal_eval
my_new_user_list = json_data.get('0')
print(type(my_new_user_list))
custom_user_list = literal_eval(json_data.get('0'))
print(type(custom_user_list))
my_old_user_list = ['user1', 'user2', 'joe', 'doe', 'foo']
diff_list = list(set(my_old_user_list) - set(custom_user_list))我从你的代码和我添加的代码中打印了变量的类型。我希望我解决了你的问题。
https://stackoverflow.com/questions/56142515
复制相似问题