首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何比较字典和字符串,并输出字典?

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

Stack Overflow用户
提问于 2017-11-24 03:47:50
回答 2查看 135关注 0票数 0

我对python很陌生,我试着编写可以将字典与字符串相比较的代码。我的输入字典和字符串如下所示:

代码语言:javascript
复制
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'

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

代码语言:javascript
复制
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'}

或类似于维护句子完整性的元组列表(这在我的情况下也很重要)

代码语言:javascript
复制
    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')]

我试图通过将输入作为两个列表(而不是键字典和字符串之间的比较)来进行比较,并编写了以下代码:

代码语言:javascript
复制
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'

对于上面的输入,我写道:

代码语言:javascript
复制
[i for i in (st.split(' ')) if i.lower() in [i.lower() for i in l]]

得到的输出如下:

代码语言:javascript
复制
['Python', 'Php', 'Java', 'PYTHON', 'PHP', 'JAVA', 'python', 'php', 'java']

我想应用这个来比较字典和列表,并根据需要得到输出,但是不知道如何去做。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-11-24 03:56:32

太简单了:

代码语言:javascript
复制
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(' ')}

产出将是:

代码语言:javascript
复制
 {'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'}

如果您想得到与您的输入相同的顺序!只要简单的按一下命令键就行了!:

代码语言:javascript
复制
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

代码语言:javascript
复制
from collections import OrderedDict

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

把一切都说出来:

代码语言:javascript
复制
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)

然后输出将是:

代码语言:javascript
复制
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')])
票数 1
EN

Stack Overflow用户

发布于 2017-11-24 05:44:13

不要为这个简单的任务使用两个循环,只需使用逻辑和一些条件来代替许多循环,您的工作可以在一个循环中完成:

代码语言:javascript
复制
import json

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

data = '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'

result = {}
for words in data.split():

    if words.title() in data_keys:
        result[words] = data_keys.get(words.title())
    elif words.lower() in data_keys:
        result[words] = data_keys.get(words.lower())
    elif words.upper() in data_keys:
        result[words] = data_keys.get(words.upper())



    else:
        result[words] = 0

print(json.dumps(result, indent=2))

产出:

代码语言:javascript
复制
{
  "php": "ssl",
  "Java": "low-level language",
  "Python": "high-level language",
  "to": 0,
  "programming": 0,
  "have.": 0,
  "java": "low-level language",
  "PHP": "ssl",
  "languages": 0,
  "python": "high-level language",
  "skills": 0,
  "languages.": 0,
  "Php": "ssl",
  "JAVA": "low-level language",
  "are": 0,
  "PYTHON": "high-level language",
  "and": 0,
  "good": 0
}

如果您想按照您的注释来维持秩序:

应保持句子的完整性。

然后:

代码语言:javascript
复制
import json

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

data = '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'

result = []
for words in data.split():

    if words.title() in data_keys:
        result.append((words,data_keys.get(words.title())))
    elif words.lower() in data_keys:
        result.append((words,data_keys.get(words.lower())))
    elif words.upper() in data_keys:
        result.append((words,data_keys.get(words.upper())))




    else:
        result.append((words,0))



print(json.dumps(result,indent=2))

产出:

代码语言:javascript
复制
[
  [
    "Python",
    "high-level language"
  ],
  [
    "and",
    0
  ],
  [
    "Php",
    "ssl"
  ],
  [
    "and",
    0
  ],
  [
    "Java",
    "low-level language"
  ],
  [
    "are",
    0
  ],
  [
    "programming",
    0
  ],
  [
    "languages.",
    0
  ],
  [
    "PYTHON",
    "high-level language"
  ],
  [
    "and",
    0
  ],
  [
    "PHP",
    "ssl"
  ],
  [
    "and",
    0
  ],
  [
    "JAVA",
    "low-level language"
  ],
  [
    "are",
    0
  ],
  [
    "good",
    0
  ],
  [
    "skills",
    0
  ],
  [
    "to",
    0
  ],
  [
    "have.",
    0
  ],
  [
    "python",
    "high-level language"
  ],
  [
    "and",
    0
  ],
  [
    "php",
    "ssl"
  ],
  [
    "and",
    0
  ],
  [
    "java",
    "low-level language"
  ],
  [
    "are",
    0
  ],
  [
    "programming",
    0
  ],
  [
    "languages",
    0
  ]
]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47466084

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档