不能用python脚本在字典中输入字符

2024-09-20 07:00:17 发布

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

我通过检索json格式的数据制作了python字典。你知道吗

[{"id":"1","kingdom":"Metazoa ","phylum":"Arthropoda ","class":"Insecta ","order":"Hemiptera ","family":"Belostomatidae ","genus":"Abedus"},<br>
{"id":"2","kingdom":"Viridiplantae ","phylum":"Streptophyta ","class":"unclassified_Streptophyta ","order":"Pinales ","family":"Pinaceae ","genus":"Abies"}]

当我访问数据时,我试图只取那些genus的值是Abies的数据,但是我得到了错误

ValueError : invalid literal for int ( ) with base 10 : 'Abies'

但是如果我输入一个数值,我会得到与json的“id”相对应的数据。你知道吗

这是我的剧本:

import urllib2
import simplejson

title = raw_input("find taxonom: ")
print "key: ",title 

response = urllib2.urlopen("http://localhost/csv/taxo.json")
data = simplejson.load(response)
get = int(str(title))
print data[get]

如何让它显示每个数据的“id”、“kingdom”、“phlyum”、“class”等数据,这些数据与genus的输入相匹配?你知道吗


Tags: 数据importidjsontitleorderurllib2family
2条回答

这将找到第一个匹配的条目:

print next(x for x in data if x["genus"] == title)

出现的错误是因为您试图将包含非数值的字符串转换为整数。要解决这个问题,请删除get = int(str(title))


您拥有的数据是一个列表。列表使用数字索引来访问列表中不同位置的元素。要打印genus值,必须执行以下操作:

print data[1]['genus']

注意,这是针对列表中的第二个字典。要打印第一个字典的genus值,必须将1更改为0


要打印包含genus匹配标题值的每个字典的值,请执行以下操作:

for attr_map in data:
    if attr_map['genus'] == title:
        print attr_map

程序运行示例:

>>> import json
>>> buffer = '[{"id":"1","kingdom":"Metazoa ","phylum":"Arthropoda ","class":"Insecta ","order":"Hemiptera ","family":"Belostomatidae ","genus":"Abedus"},{"id":"2","kingdom":"Viridiplantae ","phylum":"Streptophyta ","class":"unclassified_Streptophyta ","order":"Pinales ","family":"Pinaceae ","genus":"Abies"}]'
>>> data = json.loads(buffer)
>>> data
[{u'kingdom': u'Metazoa ', u'family': u'Belostomatidae ', u'class': u'Insecta ', u'id': u'1', u'phylum': u'Arthropoda ', u'genus': u'Abedus', u'order': u'Hemiptera '}, {u'kingdom': u'Viridiplantae ', u'family': u'Pinaceae ', u'class': u'unclassified_Streptophyta ', u'id': u'2', u'phylum': u'Streptophyta ', u'genus': u'Abies', u'order': u'Pinales '}]
>>>
>>> title = raw_input("find taxonom: ")
find taxonom: Abies
>>> for attr_map in data:
...     if attr_map['genus'] == title:
...         print attr_map
... 
{u'kingdom': u'Viridiplantae ', u'family': u'Pinaceae ', u'class': u'unclassified_Streptophyta ', u'id': u'2', u'phylum': u'Streptophyta ', u'genus': u'Abies', u'order': u'Pinales '}

相关问题 更多 >