转换为字典列表

时间:2016-10-12 19:03:26

标签: python dictionary

我有一个文本文件,里面装满了twitter api提供的地方数据。以下是2行的样本数据

{'country': 'United Kingdom', 'full_name': 'Dorridge, England', 'id': '31fe56e2e7d5792a', 'country_code': 'GB', 'name': 'Dorridge', 'attributes': {}, 'contained_within': [], 'place_type': 'city', 'bounding_box': {'coordinates': [[[-1.7718518, 52.3635912], [-1.7266702, 52.3635912], [-1.7266702, 52.4091167], [-1.7718518, 52.4091167]]], 'type': 'Polygon'}, 'url': 'https://api.twitter.com/1.1/geo/id/31fe56e2e7d5792a.json'}

{'country': 'India', 'full_name': 'New Delhi, India', 'id': '317fcc4b21a604d5', 'country_code': 'IN', 'name': 'New Delhi', 'attributes': {}, 'contained_within': [], 'place_type': 'city', 'bounding_box': {'coordinates': [[[76.84252, 28.397657], [77.347652, 28.397657], [77.347652, 28.879322], [76.84252, 28.879322]]], 'type': 'Polygon'}, 'url': 'https://api.twitter.com/1.1/geo/id/317fcc4b21a604d5.json'}

我想要' country',' name'并且' cordinates'为了做到这一点,我们需要逐行迭代整个文件。所以我将每一行附加到一个列表

data = []
with open('place.txt','r') as f:
    for line in f:
        data.append(line)

当我检查数据类型时,它显示为' str'而不是' dict'。

type(data[0])
str

data[0].keys()
AttributeError: 'str' object has no attribute 'keys'

如何解决此问题,以便将其保存为词典列表。

最初的推文是通过以下代码进行编码和解码的:

f.write(jsonpickle.encode(tweet._json, unpicklable=False) + '\n') #encoded and saved to a .txt file
tweets.append(jsonpickle.decode(line)) # decoding

地方数据文件通过以下代码保存:

fName = "place.txt"
newLine = "\n"
with open(fName, 'a', encoding='utf-8') as f:
    for i in range(len(tweets)):
        f.write('{}'.format(tweets[i]['place']) +'\n')

4 个答案:

答案 0 :(得分:2)

在您的情况下,您应该使用json进行数据解析。但是如果你遇到json的问题(由于我们讨论API这几乎是不可能的),那么通常可以从字符串转换为字典:

>>> import ast
>>> x = "{'country': 'United Kingdom', 'full_name': 'Dorridge, England', 'id': '31fe56e2e7d5792a', 'country_code': 'GB', 'name': 'Dorridge', 'attributes': {}, 'contained_within': [], 'place_type': 'city', 'bounding_box': {'coordinates': [[[-1.7718518, 52.3635912], [-1.7266702, 52.3635912], [-1.7266702, 52.4091167], [-1.7718518, 52.4091167]]], 'type': 'Polygon'}, 'url': 'https://api.twitter.com/1.1/geo/id/31fe56e2e7d5792a.json'}
"
>>> d = ast.literal_eval(x)
>>> d

d现在是字典而不是字符串。 但是如果你的数据是json格式,python有一个内置的lib来处理json格式,并且使用json比使用j更好更安全。

例如,如果您收到回复,请说resp,您可以这样做:

response = json.loads(resp)

现在您可以将response解析为字典。

答案 1 :(得分:1)

  

注意:单引号无效JSON。

我从未尝试过Twitter API。看起来您的数据无效JSON。这是一个简单的预处理方法,将canvas(单引号)替换为'(双引号)

"

答案 2 :(得分:1)

您应该使用python json库进行解析并获取值。 在python中它很容易。

import json
x = '{"country": "United Kingdom", "full_name": "Dorridge, England", "id": "31fe56e2e7d5792a", "country_code": "GB", "name": "Dorridg", "attributes": {}, "contained_within": [], "place_type": "city", "bounding_box": {"coordinates": [[[-1.7718518, 52.3635912], [-1.7266702, 52.3635912], [-1.7266702, 52.4091167], [-1.7718518, 52.4091167]]], "type": "Polygon"}, "url": "https://api.twitter.com/1.1/geo/id/31fe56e2e7d5792a.json"}'
y = json.loads(x)
print(y["country"],y["name"],y["bounding_box"]["coordinates"])

答案 3 :(得分:0)

您可以使用此列表

mlist= list() 
for i in ndata.keys(): 
    mlist.append(i)