如何使用python在字典中分配值和键

时间:2018-09-29 02:37:38

标签: python python-3.x python-2.7

我是通过python导师运行此代码的,只是对键和值的切换方式感到困惑。我还对handler对应的值感到困惑,因为我不确定myDict[d[key]]中的d的实际作用。

[d[key]]

4 个答案:

答案 0 :(得分:1)

函数d中正在传入的字典。您的代码正在创建一个新字典,将另一个方向映射(从原始字典的值到其键)。由于可能没有一对一的映射(因为可以在字典中重复值),所以新的映射实际上是从值到键列表。

当代码在d中的键上循环时,它随后使用d[key]查找相应的值。正如我在上面评论的那样,这实际上并不是解决此问题的最有效方法。您可以代替遍历字典的items()并在循环中获取key, value 2元组,而不是先获取键并进行索引以获得值。

这是我重写函数的方式,我认为这是一种更清晰的方式(也许效率更高):

def dict_invert(d):
    myDict = {}
    for key, value in d.items():       # Get both key and value in the iteration.
        if value in myDict:            # That change makes these later lines more clear,
            myDict[value].append(key)  # as they can use value instead of d[key].
        else:
            myDict[value] = [key]      # here too
    for val in myDict.values():
        val.sort()
    return myDict

答案 1 :(得分:1)

您正在显示的功能会倒置字典d。字典是唯一键的集合,这些键映射到不一定唯一的值。这意味着当您交换键和值时,您可能会获得具有相同值的多个键。您的函数通过将输入中的键添加到相反的列表中来处理此问题,而不是将它们直接存储为值。这样可以避免发生任何冲突。

让我们先从概念上看一下样本,然后再进行深入研究。假设您拥有

d = {
    'a': 1,
    'b': 1,
    'c': 2
}

将其反转时,将具有键12。键1将具有两个值:'a''b'。键2仅具有一个值:'c'。我为键和值使用了不同的类型,因此当您查看输入与输出时,您可以立即知道。输出应如下所示:

myDict = {
    1: ['a', 'b'],
    2: ['c']
}

现在让我们看一下代码。首先,您初始化一个空输出:

myDict = {}

然后您逐步浏览输入d中的每个键。请记住,这些键将成为输出的值:

for key in d.keys():

dkey中的值为d[key]。您需要检查这是否是myDict中的 key ,因为值成为相反的键:

if d[key] in myDict:

如果输入的值已经是myDict中的键,则它映射到d中的键列表,您需要在列表中追加另一个。具体来说,d[key]表示d中键key的值。此值成为myDict中的键,这就是为什么要像这样对其进行索引的原因:

myDict[d[key]].append(key)

否则,创建一个新列表,其中记录单个逆:

else:
    myDict[d[key]] = [key]

最后一步是对逆值进行排序。这不一定是一个好主意。这些值是输入中的键,因此保证它们是可哈希的,但不一定彼此可比:

for val in myDict.values():
    val.sort()

以下应在Python 3中引发错误:

dict_invert({(1, 2): 'a', 3: 'b'})

答案 2 :(得分:0)

myDict[d[key]]取值为d[key]并将其用作myDict中的键,例如

d = {'a': 'alpha', 'b': 'beta'}
D = {'alpha': 1, 'beta': 2}
D[d['a']] = 3
D[d['b']] = 4

现在dD的内容应如下所示

d = {'a': 'alpha', 'b': 'beta'}
D = {'alpha': 3, 'beta': 4}

答案 3 :(得分:0)

d是您要传递给函数的字典

def dict_invert(d)

创建时

myDict[d[key]] = d

它的意思是

myDict[value of d] = key of d

产生

myDict = {'value of d': 'key of d'}