python - 如果值相同则合并字典键

标签 python

所以这是一个奇怪的问题,我怀疑它很容易解决。我正在为家里的远程播放器构建一个歌词网络应用程序。目前,它会生成一个包含玩家正在播放的歌曲的字典。例如:

{
    'bathroom': <Song: Blur - Song 2>,
    'bedroom1': <Song: Blur - Song 2>,
    'kitchen': <Song: Meat Loaf - I'd Do Anything for Love (But I Won't Do That)>,
}

偶尔会同步这些播放器的子集。所以——如上所述——它们显示相同的值。 我想在界面中对它们进行分组。当我构建字典时我可以更聪明,但假设我不会这样做,是否有按值合并键的好方法?

上面的期望输出是这样的:

{
    'bathroom,bedroom1': <Song: Blur - Song 2>,
    'kitchen': <Song: Meat Loaf - I'd Do Anything for Love (But I Won't Do That)>,
}

然而,这确实打破了我想要查找事物的方式(我想通过名称指定,因此这是一个字典)......是否有更好的集合可以每个值有多个键并指示何时是否存在合并的重复项(并向后引用它们的所有键)?


有一个很好的答案,可以将其翻转为歌曲的键,并将播放器列表作为值。这很棒,只是有时我想知道指定播放器正在播放哪首歌。这就是我最初选择字典的原因。

有没有一种好的方法可以在两个方向上保留查找(除了保留两个集合)?

最佳答案

from itertools import groupby

x = {
    'bathroom': 'a',
    'bedroom1': 'a',
    'kitchen': 'b'
}


{
  ','.join(i[0] for i in v): k
  for k,v in groupby(sorted(x.iteritems(), key=lambda p: p[1]), lambda p: p[1])
}

关于python - 如果值相同则合并字典键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33871034/

相关文章:

python - 有没有一种简单的方法可以将 PyCharm 和 WinPython 的整个安装放在 USB 内存棒上?

python - 与 MTurk 的 OR-ing 资格

python - 用于 Windows 上 python 的 gtk 2.7 包

python - rsync over ssh - 使用 Paramiko 在 Python 中创建的 channel

python - 如何使用 Figure(matplotlib FigureCanvasQTAgg) 绘制具有多个 yaxis 的共享 xaxis 子图?

python - Pymongo查询问题

python - Python中的快速整数矩阵零空间?

python - py.test - 在不同目录中收集 2 个 conftest.py 时出错

python - 如何在 Python 套接字中加密 http 请求

python - 在python中生成给定范围内的所有日期