我有一些DB data1,当fetchall看起来像这样时。
{u'name': 'abcd', u'id': 3}
{u'name': 'efg', u'id': 5}
{u'name': 'xyz', u'id': 6}
我还有另一个data2,不是来自DB。
看起来像set(['abc', 'abdc', 'bcd'])
我要查找data2在data1的名称中是否存在,并想返回u'id'
号(如果存在)
有没有办法在Python中找到?就像使用c ++ std :: map ...类似如下
map<string,int> data1
list<string> data2
map<string,int>::iterator it = data1.find(data2.front());
if (it != data1.end()) {
std::cout << it->second <<\n;
}
下面的我的python代码
data1 = connect()
data2 = set([])
namelist = set(['abc', 'abdc', 'bcd'])
for row in data1:
data2.add(row['name'])
find = set([])
find = data2.intersection(data2)
print(find)
# want to print id value
答案 0 :(得分:1)
我认为您正在寻找的是
for elem in data2:
try:
print(data1[elem])
except KeyError:
pass
也许甚至没有循环,因为您的C ++代码只是获取列表的第一个元素:
elem = data2[0]
try:
print(data1[elem])
except KeyError:
pass
或者,因为您提到了一个集合,并且C ++集合默认情况下是排序的(Python集合是任意顺序的,所以如果您想要最小值,则必须要它),也许是这样:
elem = min(data2)
try:
print(data1[elem])
except KeyError:
pass