2011-02-02 186 views
0

如果我有一系列的名单中(例如)词典:查找字符串位置 - Python的

{'Name': ['Thomas', 'Steven', 'Pauly D'], 'Age': [30, 50, 29]} 

,我想找到字符串位置,这样我就可以得到同样的位置从另一个名单。

因此,例如,

if x = 'Thomas' #is in position 2: 
    y = dictionary['Age'][2] 
+0

您确定这是实现此目的的最佳方式吗?你如何确定这些列表的顺序相同?另外,“托马斯”在位置2的情况如何?这并不清楚。 – Falmarri 2011-02-02 01:13:59

回答

2
i = dictionary['Name'].index('Thomas') 
y = dictionary['Age'][i] 

然而,index执行线性搜索,这可能是一个大名单慢。在类似这样的其他情况下,我使用的模式是这样的:

Person = collections.namedtuple('Person', ['Name', 'Age']) 
dictionary = {'Thomas': Person('Thomas', 30), 'Steven': Person('Steven', 50), 'Pauly D': Person('Pauly D', 29)} 

你可以做同样的事情用一个字典,如果你需要的记录有不同的长度。无论哪种方式,像这样存储将有助于更快地访问记录。

5

首先将它存储在正确的结构中。

D = dict(zip(dictionary['Name'], dictionary['Age'])) 
print D['Thomas'] 
0

你想用.index()

d = {'Name': ['Thomas', 'Steven', 'Pauly D'], 'Age': [30, 50, 29]} 
position = d['Name'].index('Steven') 
age = d['Age'][position] 

age = d['Age'][d['Name'].index('Steven')]更密集。

0
infoDict = { 
    'Name': ['Thomas', 'Steven', 'Pauly D'], 
    'Age': [30, 50, 29] 
} 

def getAge(name, d): 
    offs = d['Name'].index(name) 
    return d['Age'][offs] 

getAge('Thomas', infoDict) 
相关问题