从python字典获取值并仅转换为一个字符串值

时间:2019-10-10 14:02:06

标签: python dictionary

我需要从json文件中获取字典或词典的特定列表中的某些值,并将其仅转换为一个键,即值作为字符串值。

像这样的文件示例。

1)首先,我将所有值复制到变量中。

var fileA =

[{'key1': 'value1',
  'key2': 'value2',
  'key3': 'value3',
  '...': '...',
  'keyN': {'keyNN': [{'key_a': 'value_a',
     'key_b': 'value_b'},
    {'key_AA': 'value_AA'}]}},
 {'key1': 'value1',
  'key2': 'value2',
  'key3': 'value3',
  '...' :'...',
  'keyN': {'keyNN': {'key_a': 'value_a',
    'key_b': 'key_b'}}},
....]

2)在评估两种情况之后:第一种情况是类型是 dict 还是 list ,因为“ keyN”是字典,“ keyNN”是字典,但是第一句话“ key_a”是词典列表的一部分,第二句话是其他词典。

如果我将此代码放入函数中并显示来自迭代的错误消息,则我手动解决了这一部分。

如果结果是字典,我会打印值并存储在变量中。

 if type(fileA['keyN']['keyNN']) is dict:
            X= fileA['keyN']['keyNN'].copy()
            del (fileA['keyN'])
            X.popitem()
            X.update([fileA])
    print(X)

TypeError: string indices must be integers

在第二种情况下,如果type是列表:

for index in fileA['keyN']['keyNN']:
    for key in index:
        new_values = ("{}={}".format(key, index[key]))
        print(new_values)
print(type(new_values))

打印结果

key_a=value_a
key_b=value_b
key_c=value_c
<class 'str'>

3)想法是使用函数popitem()和update()。

fileA[0].popitem()
fileA[0].update('keyN'= new_values)

结果


[{'key1': 'value1',
  'key2': 'value2',
  'key3': 'value3',
  '...': '...',
  'keyN': 'key_AA=value_AA'},

但是预期结果应该是:

[{'key1': 'value1',
  'key2': 'value2',
  'key3': 'value3',
  '...': '...',
  'keyN': 'key_a=value_a,
           key_b=value_b,
           key_AA=value_AA'},
 {'key1': 'value1',
  'key2': 'value2',
  'key3': 'value3',
  '...' :'...',
  'keyN': 'key_a=value_a,
           key_b=key_b'}},
....]

如最后一个示例所示,keyN是主键,所有嵌套的键和值都包含在一个唯一的字符串(keyN的值)中。

我无法使用新值存储和更新主键参数,我尝试使用popitem并在更新后使用

因此,经过几个小时之后,请检查所有选项,我会寻求您的帮助。 谢谢

1 个答案:

答案 0 :(得分:0)

我解决了一部分问题,开始工作,然后又出错了。

for met in fileA:
    if met.get('keyN') is not None:
        if type(met['keyN']['keyNN']) is dict:
            new_values = []
            for key, value in met['keyN']['keyNN'].items():
                new_values.append("{}={}".format(key,value))
                new_str = ""
                for i in new_values:
                    new_str = ";".join(str(x) for x in new_values)
            met['keyN'].popitem()
            met.update(keyN= new_str)
        elif type(met['keyN']['keyNN']) is list:
            new_values = []
            for index in met['keyN']['keyNN']:
                for key in index:
                    new_values.append("{}={}".format(key, index[key]))
                    new_str = ""
                    for i in new_values:
                        new_str = ";".join(str(x) for x in new_values)
            met['keyN'].popitem()
            met.update(keyN= new_str)

***

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-18-600979395481> in <module>
      1 for met in keyN:
      2     if met.get('keyN') is not None:
----> 3         if type(met['keyN']['keyNN']) is dict:
      4             new_values = []
      5             for key, value in met['keyN']['keyNN'].items():

TypeError: string indices must be integers