用字符串,列表和&操作字典

时间:2014-10-13 05:19:05

标签: python string list dictionary

我有一个清单&一本字典。

l = ['one', 'two', 'three', 'four']
d = {'aw.one' : '#aw.one', 'aw.two' : '#aw.two'}

现在,我有一个字符串:

s = "this is one sentence"

我想检查列表中的任何项目是否存在于字符串中。如果是,那么我想从字典中获取其键包含该列表项的值。

例如,在给定的例子中 - 字符串中的'one'出现在列表l中 - 然后我需要打印#aw.one。

如果我的字符串是:

s = "this is two balls"

它应该打印

#aw.two.

我该怎么做?

5 个答案:

答案 0 :(得分:1)

直接的方法是迭代列表并检查单词是否在s中,然后迭代字典键以检查它们中是否有任何单词,如此

for item in l:
    if item in s:
        for key in d:
            if item in key:
                print d[key]

我们甚至可以像这样编写

,而不是在多行中写相同的内容
print ", ".join(", ".join(d[k] for k in d if i in k) for i in l if i in s)

答案 1 :(得分:1)

也许最好的方法是构建一个dict,哪些键是值部分,所以要查找它是否只存在成本O(1)

>>> import re
>>> l = ['one', 'two', 'three', 'four']
>>> d = {'aw.one' : '#aw.one', 'aw.two' : '#aw.two'}
>>> s = "this is two balls"
>>> d_reversed = {
...     v_part:k
...     for k,v in d.iteritems()
...     for v_part in re.findall(r"[\w']+", v) #for all words from every value
...     
... }
>>> for w in s.split():
...     if w in d_reversed:
...         print d_reversed[w], d[d_reversed[w]] #print the key from the main dict, and its value
...         break
... 
aw.two #aw.two

答案 2 :(得分:1)

你可以用几个列表推导和过滤器lambda实现相同的功能:

matching_words = [ word for word in l if word in s ]
matching_values = [ value for key, value in d.items() if list(filter(lambda x: x in key, matching_words)) ]
for value in matching_values:
    print(value)

答案 3 :(得分:0)

如果您的密钥前缀始终相同:

>>> l = ['one', 'two', 'three', 'four']
>>> d = {'aw.one' : '#aw.one', 'aw.two' : '#aw.two'}
>>> s = "this is one sentence"
>>> print(''.join(d.get('aw.{}'.format(w)) for w in l if w in s))
#aw.one

答案 4 :(得分:0)

使用set和dictionary:

print [d['aw.'+i] for i in (set(s.split()) & set(l)) if 'aw.'+i in d]