Questions tagged «dictionary»

5
为什么要将函数存储在python字典中?
我是python的初学者,我刚刚学习了一种涉及字典和函数的技术。语法很简单,看似微不足道,但是我的python感觉有点刺痛。有人告诉我这是一个深层的,非常Python化的概念,我不太了解它的重要性。有人可以给这项技术起个名字,并解释它为何/为什么有用吗? 该技术是当您拥有python字典和打算在其上使用的函数时。您在dict中插入一个额外的元素,其值是函数的名称。当您准备调用该函数时,可以通过引用dict元素而不是按名称引用该函数来间接发出该调用。 我正在使用的示例来自第2版的《学习Python的艰难方法》。(这是您通过Udemy.com注册时可用的版本;可惜的是,实时免费HTML版本当前是Ed 3,并且不再包含此示例)。 释义: # make a dictionary of US states and major cities cities = {'San Diego':'CA', 'New York':'NY', 'Detroit':'MI'} # define a function to use on such a dictionary def find_city (map, city): # does something, returns some value if city in map: return map[city] else: return …


5
何时在Python中使用字典和元组
想到的特定示例是文件名及其大小的列表。我不能决定列表中的每个项目是否应该是这样的形式{"filename": "blabla", "size": 123},或者只是("blabla", 123)。字典对我来说似乎更合乎逻辑,因为例如访问大小file["size"]比file[1]... 更具解释性,但是我不确定。有什么想法吗?

8
有没有比TryGetValue使用C#词典更好的方法?
我发现自己经常在网上查找问题,许多解决方案都包括字典。但是,每当我尝试实现它们时,我的代码都会令人讨厌。例如,每次我想使用一个值时: int x; if (dict.TryGetValue("key", out x)) { DoSomethingWith(x); } 这是4行代码,基本上可以执行以下操作: DoSomethingWith(dict["key"]) 我听说使用out关键字是一种反模式,因为它会使函数改变其参数。 另外,我发现自己经常需要“反向”字典,在其中翻转键和值。 同样,我经常想遍历字典中的各项,发现自己将键或值转换为列表等以更好地做到这一点。 我觉得几乎总是有一种更好,更优雅的字典使用方式,但是我很茫然。

5
用于存储数以千万计的对象以进行查询的高效方法,每秒可以插入大量插入?
这基本上是一个日志记录/计数应用程序,它在p2p聊天网络上统计数据包的数量并统计数据包的类型等。这相当于在5分钟内大约有4-6百万个数据包。并且因为我仅对此信息进行“快照”,所以我仅每5分钟删除5分钟之前的数据包。因此,此收藏集中的物品数量上限约为10到1200万。 因为我需要与不同的超级对等方建立300条连接,所以每个数据包都可能尝试插入至少300次(这可能就是为什么将此数据保存在内存中是唯一合理的选择)的可能。 目前,我一直在使用字典来存储此信息。但是由于我要存储的项目太多,所以我遇到了大对象堆的问题,并且随着时间的推移,内存使用量不断增长。 Dictionary<ulong, Packet> public class Packet { public ushort RequesterPort; public bool IsSearch; public string SearchText; public bool Flagged; public byte PacketType; public DateTime TimeStamp; } 我尝试使用mysql,但是它无法跟上我需要插入的数据量(在检查以确保它不是重复的时候),而那是在使用事务时。 我尝试了mongodb,但是该CPU的使用非常疯狂,并且没有保持任何状态。 我的主要问题是每5分钟出现一次,因为我会删除所有早于5分钟的数据包,并对该数据进行“快照”。当我使用LINQ查询来计算包含某种数据包类型的数据包的数量时。我还对数据调用了一个distinct()查询,在该查询中,我从键值对的键中剥离了4个字节(IP地址),并将其与键值对的值中的requestingport值组合在一起,并使用该值来获得不同数量的所有数据包的对等体。 该应用程序当前的内存使用量徘徊在1.1GB左右,并且在调用快照时,它甚至可以使使用量翻倍。 现在,如果我有大量的ram,这将不是问题,但是目前运行此虚拟机的vm仅限于2GB的ram。 有什么简单的解决方案吗?

1
C#字典的效率
C#字典是查找某些东西是否存在等的简单方法。但是我对它们的工作方式有疑问。假设不是字典,而是使用ArrayList。我没有使用ContainsKey(或使用另一种语言的等效方法)循环遍历ArrayList来检查那里是否存在某些东西(或者如果对数据进行排序或类似的操作,则执行二进制搜索)。效率有何不同?该ContainsKey方法是否使用某种更有效的方法,而不是遍历键并检查我搜索的内容是否存在? 如果说我创建了一个特定的哈希函数,该哈希函数与我拥有的数据类型相对应,并且是专门针对该数据集而设计的,那么是的,该哈希函数的确比循环遍历数据的速度更快。但是字典是通用的。ContainsKey方法不是特定于它获取的数据,它是一种常规的搜索方法。 基本上我要问的是。词典对程序员很有帮助。它们包括对许多事情有帮助的方法,并且它们将字符串与整数,(键和值)等结合在一起。但是关于效率,他们提供了什么?什么是在具有的差异dictionaryVS一个ArrayList的structs(string,int)

4
C#中哈希表和字典的实际大小限制
C#4词典或哈希表可以包含的项目数量的实际限制是多少,这些结构可以合理包含的字节总数。我将处理大量对象,并想知道这些结构何时开始遇到问题。 对于上下文,我将使用具有大量内存的64位系统。另外,我将需要使用某种形式或“键”来查找对象。鉴于性能需求,这些对象将需要驻留在内存中,并且许多对象将长期存在。 尽管我需要避免使用第三方或开放源代码库,但还是可以建议其他方法/模式。出于规范原因,我需要能够使用本机C#(或C ++ \ CLI)来构建它。

3
在Python 3.4+中,为什么不使用dict时,为什么我应该在SimpleNamespace上使用namedtuple,它们看起来非常相似
在某一点上,您可能会遇到带有很多参数的函数。有时将一些参数组合成超级参数是有意义的。我经常用字典来做,但是现在我正在寻找更好的做事方法。 我想转身... def do_something(ax, ay, az, bu, bv, c): # Do something ...进入... def do_something(a, b, c): # Do something ... a并b包含其子变量。 一种方法是执行以下操作: A = namedtuple('A', 'x, y, z') a = A(ax, ay, az) B = namedtuple('B', 'u, v') b = B(bu, bv) 但是,这似乎更简单: a = SimpleNamespace(x=ax, y=ay, z=az) b …
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.