2017-11-24 1 views
0

저는 파이썬에 익숙하지 않고 사전과 문자열을 비교할 수있는 코드를 작성하려고합니다. 내 입력 사전 및 문자열은 다음과 같습니다사전과 문자열을 비교하여 사전을 출력하는 방법은 무엇입니까?

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'} 
:

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' 

내가 사전 키와 문자열을 개별 단어 사이의 대소 문자를 구분 비교를 수행 할 다음과 같은 출력 (분할 문자열에 함수를 적용)

또는 나는 단점하여이를 달성하기 위해 노력

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')] 

(내 경우에 중요하다) 문장의 무결성이 유지 될 튜플의 목록과 같은 내 입력을 idering은 (오히려 키의 사전 및 문자열의 비교보다는) 두 목록으로 비교하고 다음 코드 줄 작성하기 :

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'] 

사전 및 목록을 비교하고 필요에 따라 출력을 얻지 만이를 수행하는 방법을 알기 위해이 내용을 적용하고 싶습니다.

+0

'내가 .... '당신은 아무것도 했나요 싶어? 당신의 코드는 어디에 있습니까? –

+0

죄송합니다 ... 시도한 내용으로 내 질문을 업데이트했습니다. – sharathchandramandadi

답변

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')]) 
+0

대소 문자를 구분하지 않는 것을 잊었습니다. – mhawke

+0

@mhawke, 네! 업데이트했습니다! –

+0

문장의 무결성을 유지해야합니다 (예상 출력에서 ​​언급 한 것처럼 사전에 키의 순서를 유지할 수 없다는 것을 알고 있습니다). 그러나 튜플 목록으로 결과를 출력하는 데 도움이 될 것입니다. – sharathchandramandadi

1

은 논리와 일부를 사용,이 간단한 작업을 위해 두 개의 루프를 사용하지 마십시오 많은 루프 대신 조건을 사용하면 하나만 수행 할 수 있습니다. 루프 :

,451,515,
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)) 

출력 :

{ 
    "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 
} 

당신이 주석 당신이 순서를 유지하려면 다음 문장의 무결성을 유지해야

다음 :

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)) 

출력 :

[ 
    [ 
    "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 
    ] 
] 
관련 문제