【问题标题】:Reassigning keys in dictionary w.r.t another in python在python中重新分配字典w.r.t中的键
【发布时间】:2013-10-09 09:04:17
【问题描述】:

我是 python 新手,对以下任务有疑问:

我有一本字典如下:

A_dict = {0: 'r', 1: 's', 2: 's', 3: 'r'**, 4: 'm', 5: 'm', 6: 'a', 7: 'k'}

我想根据给定的 base_dict 重新分配 A_dict 中的键:

base_dict = {0: 'k', 1: 'm', 2: 'm', 3: 's', 4: 'a', 5: 's', 6: 'r', 7: 'r'}

A_dict中的第一个值是r,它的key是0。这里的key应该赋值给base_dict (0 -> 6)r的第一个key。 A_dict 中的第二个 r 有一个键 3;应该分配给base_dict ( 3 -> 7)r 的下一个键。等等所有其他值。 base_dict 中的每个值的数量总是比A_dict 中的更多或相同。

我希望能够从上述输入中获得以下信息:

A_dict -> base_dict
0 -> 6
1 -> 3
2 -> 5
3 -> 7
4 -> 1
5 -> 2
6 -> 4
7 -> 0

我将使用上述关系来改变矩阵中值的位置。

对不起,如果我的描述不清楚。有人可以指点我正确的方向吗?

一切顺利 克

【问题讨论】:

    标签: python python-3.x dictionary


    【解决方案1】:
    >>> A_dict = {0: 'r', 1: 's', 2: 's', 3: 'r', 4: 'm', 5: 'm', 6: 'a', 7: 'k'}
    >>> base_dict = {0: 'k', 1: 'm', 2: 'm', 3: 's', 4: 'a', 5: 's', 6: 'r', 7: 'r'}
    >>>
    >>> d = sorted(base_dict)
    >>> used = set()
    >>> for key, value in sorted(A_dict.items()):
    ...     key2 = next((k for k in d if base_dict[k] == value and k not in used))
    ...     used.add(key2)
    ...     print('{} -> {}'.format(key, key2))
    ...
    0 -> 6
    1 -> 3
    2 -> 5
    3 -> 7
    4 -> 1
    5 -> 2
    6 -> 4
    7 -> 0
    
    • 使用sorted,因为字典不保证顺序。

    【讨论】:

    • 这会将 1 和 2 都映射到 3。您应该检查密钥是否已被使用。
    • @tobias_k,你是对的。我修好了。感谢您的评论。
    • 感谢您的帮助!将检查函数 next() 正在做什么以完全理解。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-06
    • 2021-07-11
    • 2013-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多