从python中的json数据中提取不同的示例,并根据json数据赋值

时间:2017-08-08 20:11:16

标签: python json

我有一个json风格的条目列表:

data = 

[
 {'data_1': 1, 'data_2': 1, 'key': A}, 
 {'data_1': 0, 'data_2': 1, 'key': B}, 
 {'data_1': 1, 'data_2': 0, 'key': A}
 ....
]

我想要做的是通过Key提取不同的示例,然后如果data_1为0则添加值“Good”,如果data_1在列表中的任何位置有1,则添加值“Bad”。

我现在的解决方案:

  1. 创建distinct = []used_data = []
  2. 遍历列表中的每个项目并提取item.key值
  3. 如果item.key不在used_data中,请将{'key': item.key, 'value': "Good" (if item.data_1 is 0) or "Bad" (if item.data_1 is 1)}附加到distinct
  4. 如果item.key已经在used_data中,则迭代通过distinct,直到找到现有的密钥条目并更改为Bad,具体取决于您是否发现data_1在某个时刻等于1。如果价值不好,它永远不会变好。但是,如果值为Good,则如果data_1的密钥为1,则可能会变为“错误”。
  5. 伪代码:

    distinct = []
    used_data = []
    for each in data:
        if each['key'] not in used_data:
           used_data.append(each['key'])
           if each['data_1'] = 1:
                distinct.append({'key':each.key, 'data_1': each.data_1, 'value':'Bad'})
           else:
                distinct.append({'key':each.key, 'data_1': each.data_1, 'value':'Good'})
        else:
           for every in distinct:
               if every['key'] = each['key']:
                   #change every.value to Bad if each.data_1 is 1
    

    以上的作品,但对我来说感觉非常低效,我想知道是否有更好的方法。是否有一个特定于json的函数可以为我做一些这个?

1 个答案:

答案 0 :(得分:0)

我只需在现有列表中迭代一次以获取“坏”键,然后再次迭代。我确信这种方式更加出色,但我认为它不会更快或更具可读性。

data = [
 {'data_1': 1, 'data_2': 1, 'key': 'A'}, 
 {'data_1': 0, 'data_2': 1, 'key': 'B'}, 
 {'data_1': 1, 'data_2': 0, 'key': 'A'}
 ]

bad_data = set([item['key'] for item in data if item['data_1'] == 1])

new_data = []
for item in data:
    item['value'] = 'Bad' if item['key'] in bad_data else 'Good'
    new_data.append(item)

如果您不想要新列表(我不确定问题),那么您可以修改现有的词典列表:

bad_data = set([item['key'] for item in data if item['data_1'] == 1])

for item in data:
    item['value'] = 'Bad' if item['key'] in bad_data else 'Good'