从字典中删除双引号

2024-05-16 01:17:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用一个字典,它的行为在很大程度上类似于字符串,因为它在字典中有双引号,包含键和值。我希望能够索引字典,但是语音标记阻止我这样做

我搜索并找到了类似的文章,但语音标记是在键上的,而不是一个包含字典的大小

以下是我所拥有的:

{'0': {0: "{'address_components': [{'long_name': '238', 'short_name': '238', "
      "'types': ['street_number']}, {'long_name': 'Lincoln Street', "
      "'short_name': 'Lincoln St', 'types': ['route']}, {'long_name': "
      "'Hahnville', 'short_name': 'Hahnville', 'types': ['locality', "
      "'political']}, {'long_name': 'St. Charles Parish', 'short_name': "
      "'St Charles Parish', 'types': ['administrative_area_level_2', "
      "'political']}, {'long_name': 'Louisiana', 'short_name': 'LA', "
      "'types': ['administrative_area_level_1', 'political']}, "
      "{'long_name': 'United States', 'short_name': 'US', 'types': "
      "['country', 'political']}, {'long_name': '70057', 'short_name': "
      "'70057', 'types': ['postal_code']}], 'formatted_address': '238 "
      "Lincoln St, Hahnville, LA 70057, USA', 'geometry': {'bounds': "
      "{'northeast': {'lat': 29.9765067, 'lng': -90.4105124}, 'southwest': "
      "{'lat': 29.9763491, 'lng': -90.4107531}}, 'location': {'lat': "
      "29.97642, 'lng': -90.4106589}, 'location_type': 'ROOFTOP', "
      "'viewport': {'northeast': {'lat': 29.9777768802915, 'lng': "
      "-90.4092837697085}, 'southwest': {'lat': 29.9750789197085, 'lng': "
      "-90.4119817302915}}}, 'place_id': 'ChIJu32jB3_PIIYRMF2Utx14Ouc', "
      "'types': ['premise']}"}}

我试过的是:

import ast
final_s = [ast.literal_eval(i) for i in p]

返回错误的预期结果

预期结果应去除双重语音标记:

{'0': {0: {'address_components': [{'long_name': '238', 'short_name': '238', 'types':
   ['street_number']}, {'long_name': 'Lincoln Street', 'short_name': 'Lincoln St',
   'types': ['route']}, {'long_name': 'Hahnville', 'short_name': 'Hahnville', 'types':
   ['locality', 'political']}, {'long_name': 'St. Charles Parish', 'short_name': 'St.
  Charles Parish', 'types': ['administrative_area_level_2', 'political']},
 {'long_name':   'Louisiana', 'short_name': 'LA', 'types':
 ['administrative_area_level_1',   'political']}, {'long_name': 'United States',
 'short_name': 'US', 'types': ['country',   'political']}, {'long_name': '70057',
 'short_name': '70057', 'types':   ['postal_code']}], 'formatted_address': '238 Lincoln
 St, Hahnville, LA 70057, USA',   'geometry': {'bounds': {'northeast': {'lat':
 29.9765067, 'lng': -90.4105124},   'southwest': {'lat': 29.9763491, 'lng':
 -90.4107531}}, 'location': {'lat': 29.97642,   'lng': -90.4106589}, 'location_type':
 'ROOFTOP', 'viewport': {'northeast': {'lat':   29.9777768802915, 'lng':
 -90.4092837697085}, 'southwest': {'lat': 29.9750789197085,   'lng':
 -90.4119817302915}}}, 'place_id': 'ChIJu32jB3_PIIYRMF2Utx14Ouc', 'types':
   ['premise']}}}

并允许我在列表中编制索引:

p[0]

Tags: name字典addresslongtypesshortstlng
2条回答

嵌套字典中有两个级别('0'0):

p = {
    '0':
        {
            0:
                "{'address_components': [{'long_name': '238', 'short_name': '238', 'types': ['street_number']}, {'long_name': 'Lincoln Street', 'short_name': 'Lincoln St', 'types': ['route']}, {'long_name': 'Hahnville', 'short_name': 'Hahnville', 'types': ['locality', 'political']}, {'long_name': 'St. Charles Parish', 'short_name': 'St Charles Parish', 'types': ['administrative_area_level_2', 'political']}, {'long_name': 'Louisiana', 'short_name': 'LA', 'types': ['administrative_area_level_1', 'political']}, {'long_name': 'United States', 'short_name': 'US', 'types': ['country', 'political']}, {'long_name': '70057', 'short_name': '70057', 'types': ['postal_code']}], 'formatted_address': '238 Lincoln St, Hahnville, LA 70057, USA', 'geometry': {'bounds': {'northeast': {'lat': 29.9765067, 'lng': -90.4105124}, 'southwest': {'lat': 29.9763491, 'lng': -90.4107531}}, 'location': {'lat': 29.97642, 'lng': -90.4106589}, 'location_type': 'ROOFTOP', 'viewport': {'northeast': {'lat': 29.9777768802915, 'lng': -90.4092837697085}, 'southwest': {'lat': 29.9750789197085, 'lng': -90.4119817302915}}}, 'place_id': 'ChIJu32jB3_PIIYRMF2Utx14Ouc', 'types': ['premise']}"
        }
}

import ast, pprint

for k, value in p.items():
    for sk, subValue in value.items():
        p[k][sk] = ast.literal_eval(subValue)

pprint.pprint(p)

输出:

{'0': {0: {'address_components': [{'long_name': '238',
                                   'short_name': '238',
                                   'types': ['street_number']},
                                  {'long_name': 'Lincoln Street',
                                   'short_name': 'Lincoln St',
                                   'types': ['route']},
                                  {'long_name': 'Hahnville',
                                   'short_name': 'Hahnville',
                                   'types': ['locality', 'political']},
                                  {'long_name': 'St. Charles Parish',
                                   'short_name': 'St Charles Parish',
                                   'types': ['administrative_area_level_2',
                                             'political']},
                                  {'long_name': 'Louisiana',
                                   'short_name': 'LA',
                                   'types': ['administrative_area_level_1',
                                             'political']},
                                  {'long_name': 'United States',
                                   'short_name': 'US',
                                   'types': ['country', 'political']},
                                  {'long_name': '70057',
                                   'short_name': '70057',
                                   'types': ['postal_code']}],
           'formatted_address': '238 Lincoln St, Hahnville, LA 70057, USA',
           'geometry': {'bounds': {'northeast': {'lat': 29.9765067,
                                                 'lng': -90.4105124},
                                   'southwest': {'lat': 29.9763491,
                                                 'lng': -90.4107531}},
                        'location': {'lat': 29.97642, 'lng': -90.4106589},
                        'location_type': 'ROOFTOP',
                        'viewport': {'northeast': {'lat': 29.9777768802915,
                                                   'lng': -90.4092837697085},
                                     'southwest': {'lat': 29.9750789197085,
                                                   'lng': -90.4119817302915}}},
           'place_id': 'ChIJu32jB3_PIIYRMF2Utx14Ouc',
           'types': ['premise']}}}

如果您不关心安全性(取决于您如何获取这些字符串)。可以对字符串使用exec()命令

例如,如果您想从示例中获取信息(称为input,您可以执行以下操作)

exec("real_dict="+input['0'][0])

现在你可以在real_dict上做任何你想做的事情,就像它是一本普通的字典一样

打印出真实内容将导致:

{'address_components': [{'long_name': '238',
   'short_name': '238',
   'types': ['street_number']},
  {'long_name': 'Lincoln Street',
   'short_name': 'Lincoln St',
   'types': ['route']},
  {'long_name': 'Hahnville',
   'short_name': 'Hahnville',
   'types': ['locality', 'political']},
  {'long_name': 'St. Charles Parish',
   'short_name': 'St Charles Parish',
   'types': ['administrative_area_level_2', 'political']},
  {'long_name': 'Louisiana',
   'short_name': 'LA',
   'types': ['administrative_area_level_1', 'political']},
  {'long_name': 'United States',
   'short_name': 'US',
   'types': ['country', 'political']},
  {'long_name': '70057', 'short_name': '70057', 'types': ['postal_code']}],
 'formatted_address': '238 Lincoln St, Hahnville, LA 70057, USA',
 'geometry': {'bounds': {'northeast': {'lat': 29.9765067, 'lng': -90.4105124},
   'southwest': {'lat': 29.9763491, 'lng': -90.4107531}},
  'location': {'lat': 29.97642, 'lng': -90.4106589},
  'location_type': 'ROOFTOP',
  'viewport': {'northeast': {'lat': 29.9777768802915,
    'lng': -90.4092837697085},
   'southwest': {'lat': 29.9750789197085, 'lng': -90.4119817302915}}},
 'place_id': 'ChIJu32jB3_PIIYRMF2Utx14Ouc',
 'types': ['premise']}

现在,您可以通过字典理解对整个输入字典执行此操作

相关问题 更多 >