2013-02-01 32 views
0

我想根据它们的复制此字典中的字符串,因此可以将它们分配给新变量。从我的研究中,似乎很容易根据键进行this,但在我的情况下,这些值就是我正在跟踪的值。基于值提取字典对

 
things = ({'alpha': 1, 'beta': 2, 'cheese': 3, 'delta': 4}) 

而且在虚构的语言,我可以指定像这样的变量 -

smaller_things = all values =3 in things 

回答

2

您可以使用.items()通过对穿越和作出这样的改变:

smaller_things = {} 
for k, v in things.items(): 
    if v == 3: 
     smaller_things[k] = v 

如果你想要一个班轮,只需要把钥匙拿回来,列表理解就可以做到:

smaller_things = [k for k, v in things.items() if v == 3] 

>>> things = { 'a': 3, 'b': 2, 'c': 3 } 
>>> [k for k, v in things.items() if v == 3] 
['a', 'c'] 
+1

+1使用'thing.iteritems()'如果蟒蛇2.x的 – wim

+0

正是我一直在寻找换我新的python和认识除了最后一行之外的一切,你能解释它是如何工作的吗? –

+0

@wim我正在运行2.7,两者都以同样的方式工作,所以它似乎。你是否对此有任何疑问? –

0

这个答案是根据我对你的问题的理解。 字典是一种散列表,字典的主要内容是提供对这些值的非整数索引。字典中的键就像索引一样。

假设考虑“数组”,数组中的元素由索引寻址,并且我们有索引而不是索引元素。就像那样,我们有字典中的值的键(非整数索引)。

还有一个含义是字典中的值是不可散列的我的意思是字典中的值是可变的,字典中的键是不可变的,只要值可以随时更改。

根本就不是好方法,通过在字典中使用的值,以解决任何事情

+0

有效的点,但我正在计划值的变化。最终,我将使用实时数据可视化,所以这些值将为可视化的动画“流”做出贡献。但是,当您使用字典时,您还要重视最佳做法。 –

-1

你可以扭转字典和那拉:

keys_values = { 1:"a", 2:"b"} 
values_keys = dict(zip(keys_values.values(), keys_values.keys())) 
print values_keys 
>>> {"a":1, "b":2} 

这样,你可以做任何你需要使用标准字典语法。

潜在的缺点是,如果您在原始字典中有非唯一值;原来具有相同值的项目在反向字典中将具有相同的密钥,因此您无法保证哪些原始密钥是新值。可能有些值不可用(如列表)。

除非你有一个强迫性的需要是聪明的,迭代的项目更容易:

for key, val in my_dict.items(): 
    if matches_condition(val): 
     do_something(key) 
+0

-1这些值中的一些可能是不可能的,使得字典颠倒不可能。 – wim

+0

只是抓住:) – theodox

+0

@theodox应该有一个点系统暴露潜在的陷阱:] –