Skip to main content
 首页 » 编程设计

python之无法使用python脚本在字典中输入字符

2025年05月04日23lautakyan007

我通过检索 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”等数据?

请您参考如下方法:

您收到的错误是因为您试图将包含非数值的字符串转换为整数。要解决此问题,请删除 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 '}