最大字典键应具有相等数量的值[重复]
Posted
技术标签:
【中文标题】最大字典键应具有相等数量的值[重复]【英文标题】:Maximum dictionary keys should have equal number of values [duplicate] 【发布时间】:2022-01-23 18:31:32 【问题描述】:给定两个列表需要分别映射键和值,以便最大键应该具有相同数量的值。
示例: 输入:
['a', 'b', 'c', 'd']
[3,2,8,4,7,9,0,4,5,6,7]
输出:
'a':[3,2,8], 'b':[4,7,9], c:[0,4,5], 'd':[6,7]
什么是解决这个问题的好算法?我无法编写任何代码,因此没有提供任何代码。非常感谢任何帮助。
【问题讨论】:
克里斯,感谢您的编辑!你能帮忙吗? 您想要的输出不清楚。如果值列表有 9 个条目而不是 11 个条目,则可以将其拆分为 (3, 3, 3, 0)、(0, 3, 3, 3)、(2, 2, 2, 3) 或 ( 3, 2, 2, 2) 元素。在所有情况下,三个键具有相同数量的列表元素。那么,应该是哪一个呢? 哦,对不起。让我们假设每个键应该至少有一个值。这删除了第一个两个选择。如果是字典,无论是 (2,2,2,3) 还是 (3,2,2,2) 都无关紧要,我想专门针对这个问题。'a':[3,2,8], 'b':[4,7], c:[9,0], 'd':[4,5]
(3,2,2,2) 和 'a':[3,2], 'b':[8, 4], c:[7,9], 'd':[0,4,5]
(2,2,2,3) 之间存在差异。目前还不清楚您是否想要拆分,例如 A) (n+1, n+1, ...., n+1, n, n, n,..., n)
用于最大可能的 n
或 B) (n, n, n, ..., n, k)
用于最大的 n
和 k≤n
。
啊,这个问题只是关于一般方法。 this duplicate 中列出了许多方法。您只需通过将键与子列表组合来构建字典。
【参考方案1】:
from typing import List, Dict
def solution(keys: List[int], values: List[int]) -> Dict:
"""
returns the dict of key/values such that maximum keys have equal number of values
"""
resulting_dict =
average_value_counts = round(len(values) / len(keys))
if len(values) / average_value_counts > len(keys):
average_value_counts += 1
for index, stepper in enumerate(range(0, len(values), average_value_counts)):
ending_index = stepper + average_value_counts
ending_index = ending_index if ending_index < len(values) else len(values)
resulting_dict[keys[index]] = values[stepper: ending_index]
return resulting_dict
【讨论】:
试试solution(['a', 'b', 'c', 'd'], [3,2,8,4,7,9,0,4,5,6])
。
@Mr.T 感谢您突出显示测试用例,该测试用例因average_value_counts 问题而失败。编辑和修复。干杯。以上是关于最大字典键应具有相等数量的值[重复]的主要内容,如果未能解决你的问题,请参考以下文章