Python3:将字典键从字符串更改为字符串元组

Python3:将字典键从字符串更改为字符串元组,python,python-3.x,dictionary,Python,Python 3.x,Dictionary,假设我得到了一份口述: {‘我喜欢’:14,‘你喜欢’:12,‘他喜欢’:2} 我想变成这样: {(‘我’,‘喜欢’):14,(‘你’,‘喜欢’):12。(‘他’,‘喜欢’):2} 所以我想把dict表单字符串的键改成字符串的元组。 我试图做到: from ast import literal_eval as make_tuple ... d = {make_tuple(k): d[k] for k in d} 但我得到了: File "/usr/lib/python3.5/ast

假设我得到了一份口述:

{‘我喜欢’:14,‘你喜欢’:12,‘他喜欢’:2}

我想变成这样:

{(‘我’,‘喜欢’):14,(‘你’,‘喜欢’):12。(‘他’,‘喜欢’):2}

所以我想把dict表单字符串的键改成字符串的元组。 我试图做到:

from ast import literal_eval as make_tuple
...    
d = {make_tuple(k): d[k] for k in d}
但我得到了:

  File "/usr/lib/python3.5/ast.py", line 35, in parse
    return compile(source, filename, mode, PyCF_ONLY_AST)
  File "<unknown>", line 1
    of the
         ^
文件“/usr/lib/python3.5/ast.py”,第35行,在parse中
返回编译(源、文件名、模式、仅PyCF\u AST)
文件“”,第1行
的
^

做这件事最有效的方法是什么?

你可以在字典理解中这样做:

d = {'I like': 14, 'you like': 12, 'he likes': 2}
new_d = {tuple(k.split()): v for k, v in d.items()}

new_d
>>> original = {'I like': 14, 'you like': 12, 'he likes': 2}
>>> new_d = {tuple(k.split()): v for k,v in original.items()}
>>> new_d
{('I', 'like'): 14, ('you', 'like'): 12, ('he', 'likes'): 2}
输出:
您只需要内置的
tuple()

输出:

{('I', 'like'): 14, ('you', 'like'): 12, ('he', 'likes'): 2}
p、 美国


不要使用
dict
作为变量名。

您可以使用字典理解解决此问题:

d = {'I like': 14, 'you like': 12, 'he likes': 2}
new_d = {tuple(k.split()): v for k, v in d.items()}

new_d
>>> original = {'I like': 14, 'you like': 12, 'he likes': 2}
>>> new_d = {tuple(k.split()): v for k,v in original.items()}
>>> new_d
{('I', 'like'): 14, ('you', 'like'): 12, ('he', 'likes'): 2}

您可以使用两种方法:

数据:

单线解决方案:

输出:

详细解决方案:

上述听写理解与以下内容相同:

final_dict={}
for key,value in your_data.items():
    final_dict[tuple(key.split())]=value

print(final_dict)
输出:


这是一个列表,
['I like':14,'你喜欢',12,'他喜欢',2]
不是dict.@amittripath是的,这是我显示我的dict的方式。现在我编辑了这个问题以显示它的副词。@M.T我读到items制作了dict的附加副本,我希望它有效。不,
.items()
生成一个视图,不是副本。如果d是你的字典,这是你的答案:
{{{}.format(tuple(k.split()):v代表k,v在d.items()}
我认为这是错误的,因为他想要一个包含两个元素的tuple:`('I','like')。
print({tuple(key.split()):value for key,value in your_data.items()})
{('I', 'like'): 14, ('he', 'likes'): 2, ('you', 'like'): 12}
final_dict={}
for key,value in your_data.items():
    final_dict[tuple(key.split())]=value

print(final_dict)
{('I', 'like'): 14, ('he', 'likes'): 2, ('you', 'like'): 12}