如何比较字典和字符串并输出字典?

时间:2017-11-24 03:47:50

标签: python dictionary

我是python的新手,并尝试编写可以将字典与字符串进行比较的代码。我的输入字典和字符串如下所示:

l = {'Python' : 'high-level language', 'PHP' : 'ssl', 'Java' : 'low-level language'}

st = 'Python and Php and Java are programming languages. PYTHON and PHP and JAVA are good skills to have. python and php and java are programming languages'

我想在字典键和字符串单词之间进行不区分大小写的比较(在字符串上应用split函数)并输出以下内容:

final_output = {'Python' : 'high-level language',
     'and' : 'O',
     'Php' : 'ssl',
     'anbd' : 'O',
     'Java' : 'low-level language',
     'are' : 'O',
     'programming' : 'O',
     'languages.' : 'O',
     'PYTHON' : 'high-level language',
     'and' : 'O',
     'PHP' : 'ssl',
     'and' : 'O',
     'JAVA' : 'low-level language',
     'are' : 'O',
     'good' : 'O',
     'skills' : 'O',
     'to' : 'O',
     'have.' : 'O',
     'python' : 'high-level language',
     'and' : 'O',
     'php' : 'ssl',
     'and' : 'O',
     'java' : 'low-level language',
     'are' : 'O',
     'programming' : 'O',
     'languages' : 'O'}

或者像保留句子完整性的元组列表(在我的情况下这也很重要)

    final_output = [('Python' , 'low-level language'),
 ('and' , 'O'),
 ('Php' , 'ssl'),
 ('and' , 'O'),
 ('Java' , 'low-level language'),
 ('are' , 'O'),
 ('programming' , 'O'),
 ('languages.' , 'O'),
 ('PYTHON' , 'high-level language'),
 ('and' , 'O'),
 ('PHP' , 'ssl'),
 ('and' , 'O'),
 ('JAVA' , 'low-level language'),
 ('are' , 'O'),
 ('good' , 'O'),
 ('skills' , 'O'),
 ('to' , 'O'),
 ('have.' , 'O'),
 ('python' , 'high-level language'),
 ('and' , 'O'),
 ('php' , 'ssl'),
 ('and' , 'O'),
 ('java' , 'low-level language'),
 ('are' , 'O'),
 ('programming' , 'O'),
 ('languages' , 'O')]

我试图通过考虑我的输入来比较作为两个列表(而不是键和字典的字典之间的比较)并写下以下代码行来实现这一点:

l = ['Python', 'PHP', 'Java']

st = 'Python and Php and Java are programming languages. PYTHON and PHP and JAVA are good skills to have. python and php and java are programming languages'

对于上面的输入我写道:

[i for i in (st.split(' ')) if i.lower() in [i.lower() for i in l]]

并输出为:

['Python', 'Php', 'Java', 'PYTHON', 'PHP', 'JAVA', 'python', 'php', 'java']

我想将其应用于比较字典和列表并根据需要获取输出,但不知道如何操作。

1 个答案:

答案 0 :(得分:1)

这很简单:

l = {'Python' : 'high-level language', 'PHP' : 'ssl', 'Java' : 'low-level language'}
st = 'Python and Php and Java are programming languages. PYTHON and PHP and JAVA are good skills to have. python and php and java are programming languages'
l2 = {k.upper():v for k, v in l.items()}
output_dict = {i:l2.get(i.upper(), 'O') for i in st.split(' ')}

输出将是:

 {'JAVA': 'low-level language',
'Java': 'low-level language',
 'PHP': 'ssl',
 'PYTHON': 'high-level language',
 'Php': 'ssl',
 'Python': 'high-level language',
 'and': 'O',
 'are': 'O',
 'good': 'O',
 'have.': 'O',
 'java': 'low-level language',
 'languages': 'O',
 'languages.': 'O',
 'php': 'ssl',
 'programming': 'O',
 'python': 'high-level language',
 'skills': 'O',
 'to': 'O'}

如果您想在输入时获得相同的订单!只需通过订单键进行操作即可!:

your_order_key = 'Python and Php and Java are programming languages. PYTHON and PHP and JAVA are good skills to have. python and php and java are programming languages'.split(' ')

获得订单字典!你可以使用collection lib

from collections import OrderedDict

order_dict = OrderedDict()
for k in your_order_key:
    order_dict[k]=output.get(k)

全部说明:

from collections import OrderedDict
order_dict = OrderedDict()

l = {'Python' : 'high-level language', 'PHP' : 'ssl', 'Java' : 'low-level language'}
st = 'Python and Php and Java are programming languages. PYTHON and PHP and JAVA are good skills to have. python and php and java are programming languages'
l2 = {k.upper():v for k, v in l.items()}
output_dict = {i:l2.get(i.upper(), 'O') for i in st.split(' ')}
for k in your_order_key:
    order_dict[k]=output.get(k)

然后输出将是:

OrderedDict([('Python', 'high-level language'),
             ('and', 'O'),
             ('Php', 'ssl'),
             ('Java', 'low-level language'),
             ('are', 'O'),
             ('programming', 'O'),
             ('languages.', 'O'),
             ('PYTHON', 'high-level language'),
             ('PHP', 'ssl'),
             ('JAVA', 'low-level language'),
             ('good', 'O'),
             ('skills', 'O'),
             ('to', 'O'),
             ('have.', 'O'),
             ('python', 'high-level language'),
             ('php', 'ssl'),
             ('java', 'low-level language'),
             ('languages', 'O')])