python比较集和字典

时间:2018-08-07 05:11:57

标签: python dictionary set

我有一些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

1 个答案:

答案 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