-
2021-01-29 19:09:56
我想用如下词典:
示例:{[8,16]:[[1,2,4,8],8],[16,24]:[[1,2,3,4,8,12],12]}
8和16是将要输入的两个数字,我需要构造一个如上所述的字典。在
使用setdefault,我可以为dictionary中的值创建一个列表,但不能为键创建一个列表
以下是我的代码:#!/usr/bin/env python
"""
This Program calculates common factors between two Numbers , which
is stored on a list and also greatest common factor is also computed.
All this is stored in a dictionary
Example: { '[n1, n2]': [[Commonfac1(n1,n2), Commonfac2(n1,n2)....Commonfacn(n1,n2)],GreatestCommonFactor] }
"""
def Factors(number):
result = []
for i in range(1, number+1):
if (number % i) == 0:
result.append(i)
return result
def Common_Factors(n1, n2):
result = []
for element in n1:
if element in n2:
result.append(element)
return result
def greatest_common_factor(common_factors):
count = 0
length = len(common_factors)
current_largest = common_factors[count]
for i in common_factors:
count += 1
if count <= length -1:
if current_largest < common_factors[count]:
current_largest = common_factors[count]
return current_largest
def main():
n1 = 8
n2 = 16
result1 = Factors(n1)
result2 = Factors(n2)
CF = Common_Factors(result1, result2)
GCF = greatest_common_factor(CF)
dict = {}
dict.setdefault([n1, n2], []).append(CF)
print dict
if __name__ == '__main__':
main()
当我运行上述程序时,出现以下错误:
^{pr2}$
有什么关于我可以实现以上目标的提示吗?在
要澄清更多:
{[8,16]:[[1,2,4,8],8],[16,24]:[[1,2,3,4,8,12],12]}
8,16是两个数字,这将是用户输入,1,2,4,8是它的公因数,8是最大公因数。在
更多相关内容 -
在C#中有效地使用列表作为字典键
2020-03-06 20:36:42有时有必要将集合用作字典键,但是这可能会导致...本文旨在为您提供一种将列表用作字典键的有效且相对安全的方法。 概念化这个混乱 字典键必须具有可比性,以确保相等性,必须提供适当的哈希码,并且必须不可变。...目录
有时有必要将集合用作字典键,但是这可能会导致性能下降并且不安全。以下是使它更快更安全的方法。
介绍
使用C#进行功能样式编程时,您最终可能会遇到需要按项目的有序列表来键入字典的情况。有好的方法,但不是非常好的方法。本文旨在为您提供一种将列表用作字典键的有效且相对安全的方法。
概念化这个混乱
字典键必须具有可比性,以确保相等性,必须提供适当的哈希码,并且必须不可变。这些要求使使用列表作为字典键有点麻烦,因为列表通常不提供值语义——在这种情况下,是逐项比较和适当的哈希码。也许更糟的是,列表允许您随时修改它们。
总之,这里有两个主要问题,一个是逐项比较列表不是很有效,并且使用标准IList<T>实现作为字典键从根本上是不安全的,因为可以随时对其进行修改。
我们可以通过要求使用IReadOnlyList<T>来或多或少地解决后者,后者提供类似列表的访问,而不需要修改列表的方法。不过,当我们声明KeyList<T>类时,我们将在其中添加一个Add()方法。这样做的原因是允许您首先填写列表。如果我们想更加安全,则可以取消该Add()方法,并强制您将这些项作为数组传递给KeyList<T>的构造函数。未执行此操作的原因是为了提高性能。KeyList<T>的主要目的是性能,将数据传递给构造函数将需要一个副本。副本不一定很慢,但我们不需要它——我们在这里没事,因为任何采用IReadOnlyList<T>的操作都不会看到Add() 方法,这样,我们就避免了虚假的副本。
前者需要做更多的工作。我们必须在KeyList<T>上实现值相等语义。但是,在这里,我们提出了一个重要的技巧:在将每个项目添加到列表时,我们都会重新计算哈希码,这样我们就不必在以后进行计算。然后,我们将该哈希码用作相等性检查的一部分,以在它们不相等时短路。接下来,让我们看一下该KeyList<T>类的代码。
编码此混乱
sealed class KeyList<T> : IReadOnlyList<T>, IEquatable<KeyList<T>> { int _hashCode; List<T> _items; public KeyList() { _items = new List<T>(); _hashCode = 0; } public KeyList(int capacity) { _items = new List<T>(capacity); _hashCode = 0; } public T this[int index] => _items[index]; public int Count => _items.Count; public IEnumerator<T> GetEnumerator() { return _items.GetEnumerator(); } IEnumerator IEnumerable.GetEnumerator() { return GetEnumerator(); } public void Add(T item) { _items.Add(item); if (null != item) _hashCode ^= item.GetHashCode(); } public override int GetHashCode() { return _hashCode; } public bool Equals(KeyList<T> rhs) { if (ReferenceEquals(this, rhs)) return true; if (ReferenceEquals(rhs, null)) return false; if (rhs._hashCode != _hashCode) return false; var ic = _items.Count; if (ic != rhs._items.Count) return false; for(var i = 0;i<ic;++i) if (!Equals(_items[i], rhs._items[i])) return false; return true; } public override bool Equals(object obj) { return Equals(obj as KeyList<T>); } }
这里的重要方法Add()和主要Equals()方法。您可以在Add()中看到我们正在为添加的每个项目修改_hashCode字段。您可以在Equals()方法中看到,如果哈希代码不相等,我们会在最后进行逐项比较之前短路。这样可以大大提高性能。另一个性能提升在于无需计算任何内容的GetHashCode()方法。由于这些方法通常是由IDictionary<TKey,TValue>实现调用的,因此我们希望它们尽可能快,尤其是GetHashCode()方法,Dictionary<TKey, TValue>经常调用它。
如果在发布模式下运行代码,则将获得准确的性能指标。在Debug中没有那么多,因此如果您在Debug中运行,该程序将向您发出警告。您可以看到我们使用的字典,一个是标准列表,另一个是特殊KeyList<T>实例。与使用List<T>相比,使用KeyList<T>应该可以提高5x+的性能, 而且由于它只实现了列表访问的IReadOnlyList<T>,所以也更安全。现在我们两个最初的问题都解决了。
警告
已经指出,如果T类型是可变的,则这是不正确的。这是真的。然而,Dictionary<TKey, TValue>和HashSet<T>也是如此,所以这里也适用同样的警告-不要更改添加到这些列表的项的值,就像不应该更改添加到Dictionary和HashSet的键值一样。
使用其他容器
如果需要,可以将该技术应用于其他集合。如果需要(相对地)高效的无序比较,可以将其调整为HashSet<T> 。我已经在一些项目中做到了这一点。只需确保在Equals()方法中使用SetEquals()进行逐项比较,因为它更快。
-
Python利用公共键如何对字典列表进行排序详解
2020-12-24 18:55:55Python中字典的排序分为按“键”排序和按“值”排序。下面话不多说了,来一起看看详细的介绍吧 问题描述 我们有一个字典列表,想根据一个或多个字典中的值来对列表排序。 例如,有如下字典列表,根据字典中的x,由... -
Python 字典中的“键”可以是列表。
2021-01-13 06:13:34Python 字典中的“键”可以是列表。答:×中国大学MOOC:\现阶段的教师职业道德原则,应该包括:\;答:\教书育人原则\"; | \"依法执教原则\"; | \"教育人道主义原则\"; | \"为人师表原则\";"《南歌子》(天上星河转)是...Python 字典中的“键”可以是列表。
答:×
中国大学MOOC:\现阶段的教师职业道德原则,应该包括:\;
答:\教书育人原则\"; | \"依法执教原则\"; | \"教育人道主义原则\"; | \"为人师表原则\";"
《南歌子》(天上星河转)是一首悼亡诗,表达对丈夫赵明诚无限的怀念之情。
答:正确
颈椎病的扳法力求听到扳响声。
答:错
理气药主要用于治疗的是:()
答:气滞证或气逆证
教师上课时所使用的课件、视频、投影、模型等教学资源属于
答:教材
安全验证中所有的请求必须经过()之后才能通过?
答:Basic-Auth
在竞技活动中,运动员的体能水平集中表现于三个方面,下列哪一项不是的?
答:力量素质
制造企业面临的各种各样的问题都可以转化成为如何配置制造业的资源的效率的问题。
答:对
美是意识形态的产物
答:正确
Which of the following is NOT the reason accounting for economists’ change of attitude towards antitrust policies nowadays?
答:The anti-trust laws result in the worsening economic situation worldwide
我国运10的总设计师是马凤山。
答:对
微机内存按()
答:字节编址
翼龙和蛇颈龙都不属于“恐龙”的范畴
答:对
下列各项企业财务管理目标中能够同时考虑避免企业追求短期行为和风险因素的财务管理目标有( )
答:相关者利益最大化 股东财富最大化 企业价值最大化
创新是人们在改造自然和社会的过程中,方法、手段和结果的质的飞跃。
答:正确
伪装技术按照运用范围来分类的话,不包括()
答:融合伪装
科学的理想是
答:合乎社会发展要求、合乎人民利益的理想 人的主观能动性与社会发展客观趋势的一致性的反映 在正确把握社会历史发展客观规律的基础上形成的
现代天文学对银河系中心的研究主要通过除了()以外的波段展开。
答:红外
21 世纪是一个以创造、创新、创业为特征的世纪,知识经济将占主导地位。知识经济的到来,不仅对现行教育提出了严峻的挑战,而且也预示着未来教育将发生深刻的变革。承担高等教育重任的大学,有必要大力推进“三创教育”,培养“三创”人才。所谓“三创教育”,就是创造教育、创新教育和创业教育三者的有机结合。推进“三创教育”可采取下列哪些措施?
答:调整办学指导思想 改革人才培养模式 建设高素质的教师队伍 发挥学生在教学中的能动作用
党在社会主义初级阶段基本路线的最主要的内容是( )
答:“一个中心,两个基本点”
-
python字典的键可以是列表吗
2020-12-05 13:01:23python字典的键字典中的值没有任何限制, 可以是任意Python对象,即从标准对象到用户自定义对象皆... 当有键发生冲突(即字典键重复赋值),取最后(最近)的赋值。Python并不会因字典中的键存在冲突而产生一个错误,它...python字典的键
字典中的值没有任何限制, 可以是任意Python对象,即从标准对象到用户自定义对象皆可,但是字典中的键是有类型限制的。
不允许一个键对应多个值
必须明确一条原则:每个键只能对应一个项。也就是说:一键对应多个值是不允许的(像列表、元组和其他字典这样的容器对象是可以的)。 当有键发生冲突(即字典键重复赋值),取最后(最近)的赋值。Python并不会因字典中的键存在冲突而产生一个错误,它不会检查键的冲突是因为如果真这样做的话,在每个键-值对赋值的时候都会做检查,这将会占用一定量的内存。>>> dict1 = {'foo':789, 'foo': 'xyz'}
>>> dict1
{'foo': 'xyz'}
>>> dict1['foo'] = 123
>>> dict1
{'foo': 123}
键必须是可哈希的
大多数Python对象可以作为键,但它们必须是可哈希的对象。像列表和字典这样的可变类型,由于它们不是可哈希的,所以不能作为键。 所有不可变的类型都是可哈希的,因此它们都可以做为字典的键。要说明的是:值相等的数字表示相同的键,即整型数字1和浮点数1.0的哈希值是相同的,它们是相同的键。
同时,也有一些可变对象(很少)是可哈希的,它们可以做字典的键,但很少见。举一个例子,一个实现了__hash__() 特殊方法的类。因为__hash__()方法返回一个整数,所以仍然是用不可变的值(做字典的键)。 为什么键必须是可哈希的?解释器调用哈希函数,根据字典中键的值来计算存储你的数据的位置。如果键是可变对象,它的值可改变。如果键发生变化,哈希函数会映射到不同的地址来存储数据。如果这样的情况发生,哈希函数就不可能可靠地存储或获取相关的数据。选择可哈希的键的原因就是因为它们的值不能改变。
数字和字符串可以被用做字典的键,元组是不可变的但也可能不是一成不变的,因此用元组做有效的键必须要加限制:若元组中只包括像数字和字符串这样的不可变参数,才可以作为字典中有效的键。
-
包含列表的元组可以作为字典的“键”。-智慧树Python数据分析与数据可视化章节答案
2021-02-04 02:54:01Python数据分析与数据可视化:包含列表的元组可以作为字典的“键”。【?????】A:对B:错Python数据分析与数据可视化章节测试答案:错更多相关问题2020年知到汽车理论(西安理工大学)2020年生物信息学中国大学MOOC2020年... -
python3 通过列表作为键 产生字典
2019-08-16 14:05:26print(dict.fromkeys(['a','b','c'])) >>>{'a': None, 'b': None, 'c': None} -
在什么情况下,我会使用一个元组作为字典键?
2020-12-30 06:16:01经典示例:您想要将点值存储为(x,y)的元组salaries = {} salaries[('John', 'Smith')] = 10000.0 salaries[('John', 'Parker')] = 99999.0编辑1当然,你可以做salaries['John Smith'] = whatever ,但那么你将不得... -
python字典的键可以是元组吗
2020-12-30 06:16:12python字典的键字典中的值没有任何限制, 可以是任意Python对象,即从标准对象到用户自定义对象皆... 当有键发生冲突(即字典键重复赋值),取最后(最近)的赋值。Python并不会因字典中的键存在冲突而产生一个错误,它... -
为什么 Python 不能以数字作为字典键?
2021-11-03 15:52:36平时有事没事就在 Stack Overflow 上闲逛,这里有很多关于 Python 的有趣问题。...让我们定义一个使用整数、浮点数和字符串作为键的字典, 从含义上看,它们都是“1”。 my_dict = { 1: 'one (integar)', '1': 'one -
哪些可以作为字典的key
2021-06-02 17:40:58python中的类型分可以分为两类,可变类型和不可变类型 可变类型:dict、list、set 不可变类型:int、long、float、complex、string、bool、tuple 其中可变类型不能作为字典的key,因为它们没有__hash__()方法。 ... -
python中字典按键或键值排序的实现代码
2021-01-20 07:10:39字典排序 在程序中使用字典进行数据信息统计时,由于字典是无序的所以打印字典时内容也是无序的。因此,为了使统计得到的结果... key:用列表元素的某个属性和函数进行作为关键字,有默认值,迭代集合中的一项; rever -
Python中字典的键可以为元组但不能为列表
2020-07-30 11:56:34字典中的键可以是元组,但不能为列表,因为元组是不可变的,而列表是可变的。 python中要求字典中的键是不可变的,如字符串、数字或元组,而值则可以取任何数据类型。 当字典的键为列表时,系统会报错: ... -
python 获取字典特定值对应的键的实现
2020-12-16 22:36:12对于字典,通过“键”获得“值”非常简单,但通过“值”获得“键”则需绕些弯子。 一、通用:自行定义函数方式 假设: 输入:一个字典(dic)+要找的“值”value 输出:字典中所有值为value的key,这里以set形式... -
python中字典的键可以为元组,但不能为列表
2019-10-10 14:39:15字典中的键可以是元组,但不能为列表,因为元组是不可变的,而列表是可变的。 python中要求字典中的键是不可变的,如字符串、数字或元组,而值则可以取任何数据类型。 当字典的键为列表时,系统会报错: ... -
python字典中的键是什么
2021-02-03 21:54:22字典的键字典中的值没有任何限制, 可以是任意Python对象,即从标准对象到用户自定义对象皆可... 当有键发生冲突(即字典键重复赋值),取最后(最近)的赋值。Python并不会因字典中的键存在冲突而产生一个错误,它不会... -
Python将列表中的元素作为键值添加到字典中
2022-03-23 16:04:31Python 将列表中的元素添加到字典当中 -
在python字典中使用变量作为键名
2021-03-17 03:18:55我今天来是因为我有同样的问题。我必须说,我对这些答案很失望!我同意你的观点,这种冗余应该有一个惯用的解决方案。在这种情况下,JavaScript似乎比Python更明智。...例如,我有一个文件,它构建字典以通过Pyth... -
_________ 方法可以返回字典的“键 - 值对”列表,使用字典对象的 _________ 方法可以返回字典的“键”列表,...
2021-02-10 06:55:05【填空题】使用字典对象的 ____________ 方法可以返回字典的“键 - 值对”列表,使用字典对象的 _________ 方法可以返回字典的“键”列表,使用字典对象的 _____________ 方法可以返回字典的“值”列表 【判断题】... -
Python支持使用字典的“键”作为下标来访问字典中的值。
2021-01-13 12:36:44Python支持使用字典的“键”作为下标来访问字典中的值。答:√匈牙利“数学之父”是( )答:费耶Windows 7中,显示桌面的快捷键是:答:Win+D中国大学MOOC: 下列属于选择隧道位置时需要考虑的社会条件因素的是?答:... -
如何在Python中将字典键作为列表返回?
2020-04-16 12:09:37In Python 2.7 , I could get dictionary keys , values , or items as a list: 在Python 2.7中 ,我可以将字典键 , -
Python如何将字典键和值拆分为单独的列表?(代码示例)
2020-11-21 03:46:17在Python中如何将给定字典拆分为键和值的列表?下面本篇文章就来给大家介绍几种实现方法,希望对大家有所帮助。【视频教程推荐:Python教程】方法一:使用内置函数:keys()和values()keys()函数:能以列表的形式返回... -
Python列表生成式以及字典的键的数据类型
2018-08-15 20:03:48列表生成式 list = [i for i in range(10)]#for用来表示循环生成元素的个数。 list = [(i,j) for i in range (3) for j in range(2)]#后一个for嵌套于前一个for循环之中。 ...字典的键的类型...