我有这样的json文件:
{
"K1": {
"p": [
"A"
],
"s": [
"B",
"C"
]
},
"K2": {
"p": [
"A",
"F"
],
"s": [
"G",
"H",
"J"
]
}
}
我可以很容易地读入这些数据:
import json
with open('json_lists_to_sets.json') as fi:
data = json.load(fi)
然后data
如下所示:
{u'K2': {u'p': [u'A', u'F'], u's': [u'G', u'H', u'J']}, u'K1': {u'p': [u'A'], u's': [u'B', u'C']}}
但是,为了进一步分析,最好使用sets
而不是lists
。在读入数据之后,我当然可以将lists
转换成sets
:
for vi in data.values():
vi['p'] = set(vi['p'])
vi['s'] = set(vi['s'])
这给了我想要的输出:
print data['K2']
收益率
{u'p': {u'A', u'F'}, u's': {u'G', u'H', u'J'}}
我的问题是,当我在json.load
命令中读取数据时,是否可以直接将这些lists
转换为sets
,例如“将找到的所有列表转换为集合”。这样的事情存在吗?你知道吗
下面是使用
dict comprehension
实现这一点的一行表达式:但是,如果您想使用
loop
实现它,下面是一个示例:尽管
json
库提供了许多钩子来改变解码,但在加载JSON数组时没有钩子。你知道吗之后必须递归更新解码结果:
这将处理任何嵌套字典深度的列表:
但是要考虑到,包含其他字典的列表不能处理,因为字典是不可散列的。你知道吗
如果希望找到嵌套在其他列表中的列表,则必须切换到使用
frozenset()
而不是set()
才能嵌套这些列表:相关问题 更多 >
编程相关推荐