最大字典键应具有相等数量的值[重复]

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) 用于最大的 nk≤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 问题而失败。编辑和修复。干杯。

以上是关于最大字典键应具有相等数量的值[重复]的主要内容,如果未能解决你的问题,请参考以下文章

DataFrame 的 Pandas 子集,每个类具有固定数量的值 [重复]

从字典中获取最大值[重复]

在字典中查找最大值[重复]

确定给定数组中连续相等元素的最大数量

在字典中查找重复值并打印重复元素的键

查找字典的最大值并打印键、值对[重复]