天道酬勤,学无止境

Dictionary get value without knowing the key

In python if I have a dictionary which has a single key value pair and if I don't know what the key might be, how can I get the value?

(and if I have a dict with more than 1 key, value pair, how can I return any one of the values without knowing any of the keys?)

评论

You just have to use dict.values().

This will return a list containing all the values of your dictionary, without having to specify any key.

You may also be interested in:

  • .keys(): return a list containing the keys
  • .items(): return a list of tuples (key, value)

Note that in Python 3, returned value is not actually proper list but view object.

Further to Delgan's excellent answer, here is an example for Python 3 that demonstrates how to use the view object:

In Python 3 you can print the values, without knowing/using the keys, thus:

for item in my_dict:
    print( list( item.values() )[0] )

Example:

    cars = {'Toyota':['Camry','Turcel','Tundra','Tacoma'],'Ford':['Mustang','Capri','OrRepairDaily'],'Chev':['Malibu','Corvette']}
    vals = list( cars.values() )
    keyz = list( cars.keys() )
    cnt = 0
    for val in vals:
        print('[_' + keyz[cnt] + '_]')
        if len(val)>1:
            for part in val:
                print(part)
        else:
            print( val[0] )
        cnt += 1

    OUTPUT:
    [_Toyota_]
    Camry
    Turcel
    Tundra
    Tacoma
    [_Ford_]
    Mustang
    Capri
    OrRepairDaily
    [_Chev_]
    Malibu
    Corvette

That Py3 docs reference again:

https://docs.python.org/3.5/library/stdtypes.html#dict-views

Other solution, using popitem and unpacking:

d = {"unknow_key": "value"}
_, v = d.popitem()
assert v == "value"

Two more ways:

>>> d = {'k': 'v'}

>>> next(iter(d.values()))
'v'

>>> v, = d.values()
>>> v
'v'

One more way: looping with for/in through a dictionary we get the key(s) of the key-value pair(s), and with that, we get the value of the value.

>>>my_dict = {'a' : 25}
>>>for key in my_dict:
       print(my_dict[key])
25

>>> my_other_dict = {'b': 33, 'c': 44}
>>> for key in my_other_dict:
        print(my_other_dict[key])
33
44

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • Swift dictionary get the value without access or knowing the key
    I am using the dictionary and trying to get the value without knowing or accessing the key. It is my dictionary look like "Olivia":[2.0, 0.0, 1.0, 3.0],"Amber":[60.0, 0.0, 0.0, 1.0] It is a [String: ArrayDouble] dictionary but I want to check if there is any value in the Value(ArrayDouble) which contain 60.0 then get display the Key for that value. What I was tried to do is : let number = 60.0 for (key, value) in dict{ if (number== value[0]){ print(...the key) }else{ }
  • Swift 字典在不访问或不知道密钥的情况下获取值(Swift dictionary get the value without access or knowing the key)
    问题 我正在使用字典并试图在不知道或访问密钥的情况下获取值。 我的字典看起来像"Olivia":[2.0, 0.0, 1.0, 3.0],"Amber":[60.0, 0.0, 0.0, 1.0]这是一个[String: ArrayDouble]字典,但我想检查是否有Value(ArrayDouble) 中包含 60.0 的任何值然后显示该值的键。 我试图做的是: let number = 60.0 for (key, value) in dict{ if (number== value[0]){ print(...the key) }else{ } 回答1 你可以这样去。 let dic = ["Olivia":[2.0, 0.0, 1.0, 3.0],"Amber":[60.0, 0.0, 0.0, 1.0]] let filterKeys = dic.flatMap { $0.value.first == 60 ? $0.key : nil } //If you are having only one pair like that then simply access the first object from array print(filterKeys.first) //Other wise you can access the whole array print
  • 在不知道键的情况下快速引用字典键和值(Swift Reference to a Dictionary Key and Value Without Knowing Key)
    问题 我有一个字典数组定义为 var users = [[String:String]]() 数组中的 Dictionary 是一个简单的用户名 + 是/否标志 [[1stUser: Y], [2ndUser: N], [3rdUser: N]] 在我的 TableView 单元格配置中,我定义了 let userRecord = users[indexPath.row] as NSDictionary 并且需要赋值cell.textlabel.text = username(字典的key) 检查标志(是/否),如果是 > cell.accessoryType = UITableViewCellAccessoryType.Checkmark 在上面的例子中,我应该只在 1stUser 旁边得到一个复选标记。 问题是如何在事先不知道的情况下引用字典键('1stUser'、'2nduser' 等)并检查值(是/否)? 我见过的所有 Swift 字典示例都假设我们知道检索其值的实际键(例如 users["1stUser"] 没有帮助,因为我事先不知道 1stUser 有一个 Y)。 回答1 您应该始终知道您的字典键。 如果你不这样做,你的数据结构是错误的——未知数据应该总是在字典的值中,而不是键。 考虑使用带有两个键的字典:“用户名”和“标志”。 示例代码: var users = [
  • Swift Reference to a Dictionary Key and Value Without Knowing Key
    I have an Array of Dictionaries defined as var users = [[String:String]]() The Dictionary inside the array is a simple username + yes/no flag [[1stUser: Y], [2ndUser: N], [3rdUser: N]] In my TableView cell configuration, I defined let userRecord = users[indexPath.row] as NSDictionary and need to assign cell.textlabel.text = username (the key of the dictionary) check flag (Y/N) and if Yes > cell.accessoryType = UITableViewCellAccessoryType.Checkmark In the example above, I should get a checkmark next to 1stUser only. The question is how to refer to the dictionary keys ('1stUser', '2nduser' etc
  • 在不使用动态的情况下从未知类型的字典中获取键和值列表(get key and value list from unknown typed dictionary without using dynamic)
    问题 我正在尝试将字典转换为键值对,以便我可以对其进行一些特殊解析并将其存储为字符串格式。 我正在使用 Unity,所以我不能使用 dynamic 关键字。 这是我的设置 我有一些类,我正在遍历其属性并操纵它们的值并将它们放入新字典中。 问题是我不知道如何在不使用动态技巧的情况下从我不知道类型的字典中获取键和值。 有什么想法吗? 我需要对列表做同样的事情。 Type t = GetType(); Dictionary<string, object> output = new Dictionary<string, object>(); foreach(PropertyInfo info in t.GetProperties()) { object o = info.GetValue(this, null); if(info.PropertyType.GetGenericTypeDefinition() == typeof(Dictionary<,>)) { Dictionary<string, object> d = new Dictionary<string, object>(); foreach(object key in o) //not valid { object val = DoSomething(o[key]);//not valid output[key] = val
  • get key and value list from unknown typed dictionary without using dynamic
    I am trying to convert a dictionary into key value pairs so I can do some special parsing on it and store it in string format. I am using Unity so I cannot use the dynamic keyword. Here is my setup I have some class which I am iterating across its properties and manipulating their value and putting them in a new dictionary. The problem is I don't know how to get the keys and values out of a dictionary for which I do not know the types without using the dynamic trick. Any thoughts? I will need to do the same with lists. Type t = GetType(); Dictionary<string, object> output = new Dictionary
  • 如何在没有字典键的情况下获取值?(How to obtain values without key of dictionary?)
    问题 var dictionary: Dictionary<String, AnyObject> = ["title" : "Berlin", "description" : "Berlin square", "createdBy": "Mathias", "coordinates": ["fddfhsg": ["latitude": 56.34, "longitude": 53.44]]] dictionary["coordinates"] 我需要获取纬度和经度的值,但我不键入字典的键(“fddfhsg”)。 此密钥由 Firebase 数据库生成。 感谢帮助。 回答1 您可以在不知道此键的情况下获取这些值:将“坐标”转换为正确的字典类型,然后使用可选绑定和values属性。 例子: if let dict = dictionary["coordinates"] as? [String:[String:Double]], content = dict.values.first, latitude = content["latitude"], longitude = content["longitude"] { print(latitude) print(longitude) } 56.34 53.44 作为您评论后的更新:您现在需要做的就是适应不同的字典结构。 对于你的第二本词典
  • 在没有第一个和最后一个元素的情况下循环字典(Looping over a dictionary without first and last element)
    问题 我想知道如何在没有第一个和最后一个元素的情况下遍历 Python 字典。 我的键不是从 1 开始的,所以我不能使用 len(capitals) >>> capitals = {'15':'Paris', '16':'New York', '17':'Berlin', '18':'Brasilia', '19':'Moscou'} >>> for city in capitals: >>> print(city) Paris New York Berlin Brasilia Moscou 我想要这样的结果: New York Berlin Brasilia 我的键不是从 1 开始的,所以我不能使用len(capitals) 回答1 试试这个,通过将字典转换为列表,然后打印列表 c=[city for key,city in capitals.items()] c[1:-1] 输出 ['New York', 'Berlin', 'Brasilia'] 回答2 字典在 Python 3.6+ 中排序 您可以使用list(capitals.values())[1:-1]获取除第一个和最后一个之外的城市。 capitals = {'15':'Paris', '16':'New York', '17':'Berlin', '18':'Brasilia', '19':'Moscou'}
  • 在不知道键名的情况下访问JSON对象的元素(Accessing elements of JSON object without knowing the key names)
    问题 这是我的json: {"d":{"key1":"value1", "key2":"value2"}} 有什么方法可以在不知道键是什么的情况下访问此数组中的键和值(在javascript中)? 我的json这样构造的原因是,我通过jquery调用的网络方法正在返回字典。 如果无法使用上述方法,那么我需要对返回数据的方式进行哪些更改? 这是我的网络方法的概述: <WebMethod()> _ Public Function Foo(ByVal Input As String) As Dictionary(Of String, String) Dim Results As New Dictionary(Of String, String) 'code that does stuff Results.Add(key,value) Return Results End Function 回答1 您可以使用for..in构造来遍历对象的任意属性: for (var key in obj.d) { console.log("Key: " + key); console.log("Value: " + obj.d[key]); } 回答2 这是您要找的东西吗? var data; for (var key in data) { var value = data[key]; alert(key
  • python字典键值对的值可以重复吗_当字典键相同时,为什么Python只保留最后一个键值对?...
    假设我创建了一个字典a_dictionary,其中两个键值对具有相同的键: In [1]: a_dictionary = {'key': 5, 'another_key': 10, 'key': 50} In [2]: a_dictionary Out[2]: {'key': 50, 'another_key': 10} 为什么Python在这里选择保留最后一个键值对而不是抛出关于使用相同键的错误(或至少引发警告)? 我看到它的方式,这里的主要缺点是你可能会丢失数据而不知道. (如果相关,我在Python 3.6.4上运行上面的代码.) 解决方法: 如果你的问题是为什么Python dict显示最初是以这种方式设计的……可能没有人知道. 我们知道什么时候做出决定. Python 0.9.x(1991-1993)没有dict显示; Python 1.0.x(1994)做到了.他们的工作方式与今天完全相同.来自文档:1 A dictionary display yields a new dictionary object. The key/datum pairs are evaluated from left to right to define the entries of the dictionary: each key object is used as a key into
  • 在 C# 中声明一个不知道其大小的二维数组(Declaring a 2D array without knowing its size in C#)
    问题 我想使用二维数组,但我无法提前知道它的大小。 所以我的问题是:如何申报? 然后如何向其中添加值? String[,] tabConfig = new String[?, 4]; foreach(blabla with i) { tabConfig[i, 0] = a; tabConfig[i, 1] = b; tabConfig[i, 2] = c; tabConfig[i, 3] = d; } 我知道我也可以使用列表,但我对它不是很熟悉。 谢谢! 编辑:振作起来! 在 Jon Skeet 的帮助下,这是我真正的代码! List<string[]> tabConfig = new List<string[]>(); String[] temp = new String[4];//The array that will be inside the List int line = 0, column = 0; foreach (XmlNode e in doc.DocumentElement.ChildNodes) { if (e.Attributes["Server"].Value == choice) { temp[0] = e.Attributes["Serveur"].Value;//Here is value 'a' column = 1; foreach
  • 服务提供者、缓存等使用泛型完成,无需强制转换(ServiceProvider, cache etc. done with generics without cast)
    问题 我在谈论 c# 3.5 3.0. 当缓存或 ServiceProvider 对整个应用程序只有一个实例时,我知道该怎么做。 在这种情况下,ServiceProvider 看起来像这样 public static class Service<T> { public static T Value {get; set;} } 并且可以用于不同的类型,如下所示: Service<IDbConnection>.Value = new SqlConnection("..."); Service<IDesigner>.Value = ...; //... IDbCommand cmd = Service<IDbConnection>.Value.CreateCommand(); 静态缓存也很简单: public static class Cache<T> { private static Dictionary<int, T> cache = new Dictionary<int, T>(); public static void Add(int key, T value) { cache.Add(key, value); } public static T Find(int key) { return cache[key]; } } 并且可以这样使用: Cache<string>.Add
  • Javascript 等效于 Python 的 values() 字典方法 [重复](Javascript equivalent of Python's values() dictionary method [duplicate])
    问题 这个问题在这里已经有了答案: 如何获取 JavaScript 对象的所有属性值(不知道键)? (23 个回答) 6年前关闭。 在 Python 中,我可以使用.values()方法来迭代字典的值。 例如: mydict = {'a': [3,5,6,43,3,6,3,], 'b': [87,65,3,45,7,8], 'c': [34,57,8,9,9,2],} values = mydict.values(): 其中values包含: [ [3,5,6,43,3,6,3,], [87,65,3,45,7,8], [34,57,8,9,9,2], ] 如何在 Javascript 中仅获取字典的值? 我最初的打印示例不清楚我想做什么。 我只想要字典中的值的列表/数组。 我意识到我可以循环浏览列表并创建一个新的值列表,但是有更好的方法吗? 回答1 更新我赞成 Adnan 的回答,因为它是第一个。 如果有帮助,我只是发布更多细节。 for..in 循环就是你要找的 - var dictionary = { id:'value', idNext: 'value 2' } for (var key in dictionary){ //key will be -> 'id' //dictionary[key] -> 'value' } 要获取dictionary对象中的所有键
  • C# 中的 IXmlSerializable 字典没有“键”/“值”节点(IXmlSerializable dictionary in C# without 'Key'/'Value' nodes)
    问题 我正在尝试在 C# 中序列化字典。 我能够找到的所有示例都创建了如下所示的 XML: <Dictionary> <ArrayOfEntries> <Entry> <Key>myFirstKey</Key> <Value>myFirstValue</Value> </Entry> <Entry> <Key>mySecondKey</Key> <Value>mySecondValue</Value> </Entry> </ArrayOfEntries> </Dictionary> 它会有所不同,有时ArrayOfEntries节点不是必需的,但我仍然看到字典键值对的常规模式存储在它们自己的节点中。 我想要的是以下内容: <Dictionary> <myFirstKey>myFirstValue</myFirstKey> <mySecondKey>mySecondValue</mySecondKey> </Dictionary> 我之前已经编写了ReadXml和WriteXml来执行此操作,并且它适用于单个字典,但是如果我尝试序列化和反序列化我的可序列化字典实例的List<T> ,则反序列化列表最终仅包含最后一个可序列化字典. 我认为我的读或写方法一定是贪婪的,以至于它不知道何时停止。 以下是我的可序列化字典方法,这些方法目前不适用于可序列化字典的List的序列化: public
  • 如何在不替换的情况下添加到python字典(How to add to python dictionary without replacing)
    问题 我的当前代码是category1[name]=(number)但是,如果出现相同的名称,字典中的值将被新数字替换,我将如何做到这一点,而不是替换值,而是保留原始值,并且新值也被添加了,现在给出关键的两个值,谢谢。 回答1 您必须使字典指向列表而不是数字,例如,如果类别cat1有两个数字: categories["cat1"] = [21, 78] 为了确保将新数字添加到列表中而不是替换它们,请在添加之前先检查其中是否存在: cat_val = # Some value if cat_key in categories: categories[cat_key].append(cat_val) else: # Initialise it to a list containing one item categories[cat_key] = [cat_val] 要访问这些值,您只需使用categories[cat_key] ,如果有一个值为 12 的键,它将返回[12]如果该键有两个值,则返回[12, 95] 。 请注意,如果您不想存储重复的键,您可以使用集合而不是列表: cat_val = # Some value if cat_key in categories: categories[cat_key].add(cat_val) else: # Initialise it to
  • 用一个键值和没有对应的值在python中初始化一个字典(Initializing a dictionary in python with a key value and no corresponding values)
    问题 我想知道是否有办法在 python 中用键初始化字典,但在我设置它们之前没有相应的值。 如: Definition = {'apple': , 'ball': } 然后我可以设置它们: Definition[key] = something 我只想初始化键,但我不知道相应的值,直到我以后必须设置它们。 基本上我知道我想在找到值时添加哪些键。 谢谢。 回答1 您可以将它们初始化为None 。 回答2 使用fromkeys函数用任何默认值初始化字典。 在您的情况下,您将使用None初始化,因为您没有考虑默认值。 empty_dict = dict.fromkeys(['apple','ball']) 这将初始化empty_dict为: empty_dict = {'apple': None, 'ball': None} 作为替代方案,如果您想使用None以外的一些默认值初始化字典,您可以执行以下操作: default_value = 'xyz' nonempty_dict = dict.fromkeys(['apple','ball'],default_value) 回答3 你可以使用 defaultdict。 它会让你设置字典值而不必担心键是否已经存在。 如果您访问尚未初始化的键,它将返回您指定的值(在下面的示例中,它将返回 None) from collections
  • 下标:使用字符串枚举访问我的字典值(Subscript: access my dictionary values with a String enumeration)
    问题 我想做这样的事情:使用字符串枚举访问我的字典值。 我试图重载字典的下标但没有成功。 访问字典: let district = address[JsonKeys.district] JsonKeys 是: enum JsonKeys: String { case key1 case key2 case key... } 我的下标重载如下: extension Dictionary where Key: StringLiteralConvertible, Value: AnyObject { subscript(index: FOJsonKeys) -> AnyObject { get { return self[ index.rawValue] as! AnyObject } } } 我收到以下消息: **Cannot subscript a value of type 'Dictionary<Key, Value>' with an index of type 'String'** 我哪里错了? PS:不想这样做(这会纠正错误,但这样的代码是不可读的): let district = address[JsonKeys.district.rawValue] 该字典是 AlamoFire 给我的 Json 解析字典。 我很确定我不能改变它的类型。 回答1
  • 改善Python中超大型字典的性能(Improving performance of very large dictionary in Python)
    问题 我发现如果在开始时初始化一个空字典,然后在for循环中向字典中添加元素(大约110,000个键,每个键的值是一个列表,并且在循环中也在增加),则速度会降低for循环进行。 我怀疑问题在于,字典在初始化时不知道键的数量,并且执行的操作也不是很聪明,因此存储冲突可能会变得很频繁并且会减慢速度。 如果我知道键的数量以及这些键的确切含义,python中有什么方法可以使字典(或哈希表)更有效地工作? 我隐约记得,如果您知道键,则可以巧妙地设计哈希函数(完美的哈希值?)并预先分配空间。 回答1 如果我知道键的数量以及这些键的确切含义,python中有什么方法可以使字典(或哈希表)更有效地工作? 我隐约记得,如果您知道键,则可以巧妙地设计哈希函数(完美的哈希值?)并预先分配空间。 Python没有公开预定义大小的选项来加快字典的“成长阶段”,也没有提供对字典中“放置”的任何直接控制。 也就是说,如果始终事先知道键,则可以将它们存储在集合中,并使用dict.fromkeys()从该集合构建字典。 该类方法已优化为根据设置的大小对字典进行预大小设置,并且可以填充字典而无需任何新的__hash __()调用: >>> keys = {'red', 'green', 'blue', 'yellow', 'orange', 'pink', 'black'} >>> d = dict.fromkeys
  • C# 字典:每个值有多个键(C# Dictionary: Multiple KEYS per Value)
    问题 我正在寻找一种使用单个value获取多个键的方法。 是的,我已经使用了搜索功能,但大多数答案都是相反的(每个键有多个值),但我想要相反的方向。 这背后的原因是我想为每个“主”ID 保留多个 Item-ID(用于 Bot),并且将这些多个 ID 放入一个值中太慢而无法修改(寻找一个值 => 循环低谷所有主要 ID 并获取每个值,然后检查该 ID 是否存在)。 例子 Key 1 => Value Key 2 => Value Key 3 => Value Key 4 => Value Key 5 => Value 2 寻找价值应该返回:关键 1-4,而不是 5 所以我正在寻找一种更容易做到这一点的方法 - 就像我上面说的那样。 任何人都知道这是否可能以及如何做到这一点? 提前致谢。 回答1 反过来做字典,使值成为项目列表。 例如,如果Value是一个字符串,而Key 1-4是整数,则您的字典可能如下所示: var theDictionary = new Dictionary<string, List<int>>(); 通过theDictionary["Value"]检索Value将返回一个包含 1、2、3 和 4 的整数列表。 编辑 - 添加示例: var theDictionary = new Dictionary<string, List<string>> { {"Value
  • 在没有迭代的情况下在字典中任意选择一个键 [重复](Choose one key arbitrarily in a dictionary without iteration [duplicate])
    问题 这个问题在这里已经有了答案: Python 3 上的 dict.keys()[0] [重复] (3 个回答) 4年前关闭。 我只是想确保在 Python 字典中没有办法只获得一个键(没有特定的质量或与某个值的关系),而是进行迭代。 正如我发现的那样,您必须通过循环浏览整个字典来列出它们。 像这样的东西: list_keys=[k for k in dic.keys()] 问题是我只需要一个任意键,如果字典不为空并且不关心其余的。 我想除了创建一个长列表来随机获取一个键之外,迭代一个长字典是一个很大的开销,不是吗? 有人可以指出更好的技巧吗? 谢谢 回答1 这里的很多答案都会产生一个随机密钥,但原始问题要求使用任意密钥。 这两者还是有很大区别的。 随机性有一些数学/统计保证。 Python 字典没有以任何有意义的方式排序。 所以,是的,访问任意键需要迭代。 但是对于单个任意键,我们不需要迭代整个字典。 内置函数next和iter在这里很有用: key = next(iter(mapping)) 内置的iter在映射中的键上创建一个迭代器。 迭代顺序是任意的。 next内置函数返回迭代器的第一项。 对于任意键,不需要迭代整个映射。 如果您最终要从映射中删除键,则可以改用dict.popitem 。 这是文档字符串: D.popitem() -> (k, v), remove