我有JSON文件列表。现在我打算从所有这些JSON中找到所有公共值对,并将其复制到不同的JSON。此外,应从所有JSON中删除公共值对。
我要说a.json
,b.json
,c.json
... z.json
现在所有这些公共标签值对都是
"Town" : "New York"
然后,应将此公共元素移动到名为common.json的新JSON文件中,并且还应从所有JSON文件中删除该元素。
例如json文件看起来像:
{
"RepetitionTime": 2,
"EchoTime": 0,
"MagneticFieldStrength": 3,
"SequenceVariant": "SK",
"MRAcquisitionType": "2D",
"FlipAngle": 90,
"ScanOptions": "FS",
"SliceTiming": [[0.0025000000000000022], [0.5], [-0.030000000000000027], [0.46625], [-0.06374999999999997], [0.43375000000999997], [-0.09624999999999995], [0.40000000001], [-0.12999999999], [0.36750000001], [-0.16249999998999998], [0.333750000005], [-0.19624999999500004], [0.301250000005], [-0.228749999995], [0.26749999999999996], [-0.26249999999500007], [0.235], [-0.29500000000000004], [0.20124999999999998], [-0.32875], [0.16875000001], [-0.36124999999999996], [0.13500000001], [-0.39499999999], [0.10250000000999998], [-0.42749999999], [0.06875000000499998], [-0.46124999999500005], [0.036250000005000005]],
"SequenceName": "epfid2d1_64",
"ManufacturerModelName": "TrioTim",
"TaskName": "dis",
"ScanningSequence": "EP",
"Manufacturer": "SIEMENS"
}
我认为我太复杂了。我想采取每行和第一个json文件并检查所有其他jsons。
应该有一些简单而有效的方法。任何指针?
答案 0 :(得分:2)
要一次比较所有文件,您还可以使用Sets
使用>>> import json
>>> json_dict1 = json.loads('{"a":1, "b":2}')
>>> json_dict2 = json.loads('{"a":1, "b":4, "c":5}')
>>> json_dict3 = json.loads('{"a":1, "b":2, "c":5}')
>>> a = set(json_dict1.items())
>>> b = set(json_dict2.items())
>>> c = set(json_dict3.items())
>>> a & b & c
{('a', 1)}
一次比较所有键值
Sets
请注意,您还可以使用>>> a = set('abracadabra')
>>> b = set('alacazam')
>>> a # unique letters in a
{'a', 'r', 'b', 'c', 'd'}
>>> a - b # letters in a but not in b
{'r', 'd', 'b'}
>>> a | b # letters in either a or b
{'a', 'c', 'r', 'd', 'b', 'm', 'z', 'l'}
>>> a & b # letters in both a and b
{'a', 'c'}
>>> a ^ b # letters in a or b but not both
{'r', 'd', 'b', 'm', 'z', 'l'}
执行其他操作,此处是doc:
>>> list_dict = [json_dict1, json_dict2, json_dict3]
>>> {k: v
for k, v in list_dict[0].items()
if all(k in d and d[k] == v
for d in list_dict[1:])}
{'a': 1}
修改强>
最后,我根据与你(差不多)相同的问题问自己的so question。
这是最好的response
如果您懒得点击链接,请参阅以下内容:
{ "x":"a", "x":"b" }
答案 1 :(得分:1)
由于您没有提供完整的JSON样本,我认为它只是常规的json,因为' {" key":" value"}&#39 ;。
将json字符串转换为字典:
import json
json_dict = json.loads('{"a":1, "b":2}') # converts json string to dictionary
现在假设我们有两个转换后的词典:
>>> dict1= {"a":1,"b":2}
>>> dict2= {"a":1,"b":3}
比较两个词典并找到共同的键值对(类似于diff k-v对),我使用的是python3:
>>> {k:v for k, v in dict1.items() for k1,v1 in dict2.items() if k ==k1 and v==v1}
{'a': 1}
我的帖子向您展示了如何解决您的问题,它可能会对您的特定JSON行产生边缘问题,您可以修改它并满足您的需求。希望它有所帮助