【问题标题】:How to get first key for every data dictionary in a loop如何在循环中获取每个数据字典的第一个键
【发布时间】:2022-06-19 02:26:59
【问题描述】:

假设我有这个

test= {"Default":{"test_data":{"data":"test}},
       "Test":{"abc_data":{"data":"test}},
       "Default":{"zxy_data":{"data":"test}},
      }

有一个循环

for t in test:
 first = next(iter(t))
 print(first)

输出

D
T
M

我怎样才能得到它默认、测试和大师而不是最初的字母表? 编辑:我不需要里面的钥匙,但我只需要默认、测试和主钥匙。当然这是硬编码的,但我想动态获取它

【问题讨论】:

  • 呃.... print(t)?
  • 只是print(*test)
  • 打印(test.keys()) 或打印(*test)

标签: python


【解决方案1】:

给定:

test = {
    "Default": ["blue", "white"],
    "Test": ["pink", "brown"],
    "Master": ["pink", "brown"]
}

如果您想同时访问keysvalues

for key, value in test.items():
    print(key)
    print(value)

或仅限keys

for key in test.keys():
    print(key)

第一个键是什么意思?检查OrderedDict,这是一个记住最后插入键顺序的变体。

【讨论】:

    【解决方案2】:
    test = {"Default":["blue","white"],
           "Test":["pink","brown"],
           "Master":["pink","brown"]
          }
    
    for k, v in test.items():
        print(k)
        print(v)
    
    print(test.keys())
    
    

    输出

    Default
    ['blue', 'white']
    Test
    ['pink', 'brown']
    Master
    ['pink', 'brown']
    dict_keys(['Default', 'Test', 'Master'])
    

    【讨论】:

    • 我已经更新了我的问题,很抱歉数据不完整,但我认为我只需要第一个键,例如 Default、Test 和 Master。您的解决方案是否会提取测试中的所有密钥?
    【解决方案3】:

    在 Python 中,您可以迭代字典的键、值和 (key, value) 对,如下所示...

    for key in test.keys():
      print('key : ', key)
    
    print()
    
    for value in test.values():
        print('value : ', value)
    
    print()
    
    for item in test.items():
        print('item : ', item)
    

    输出...

    key :  Default
    key :  Test
    key :  Master
    
    value :  {'test_data': {'data': 'test'}}
    value :  {'abc_data': {'data': 'test'}}
    value :  {'zxy_data': {'data': 'test'}}
    
    item :  ('Default', {'test_data': {'data': 'test'}})
    item :  ('Test', {'abc_data': {'data': 'test'}})
    item :  ('Master', {'zxy_data': {'data': 'test'}})
    

    现在让我们来看看你的代码,看看发生了什么......

    下面的代码将打印密钥。即变量“item”将包含字符串格式的键。

    for item in test:
        print(item)
    

    输出...

    Default
    Test
    Master
    

    您已经使用函数 iter() 函数创建了密钥字符串,并尝试使用 next() 函数迭代密钥字符串的字符。但是下面给出了迭代字符串的正确方法...

    s = iter('abcd')
    while True:
        try:
            item = next(s)
            print(item)
        except StopIteration as exception:
            break
    

    输出...

    a
    b
    c
    d
    

    由于您没有在任何循环中使用 next() 函数,它只打印键的第一个字符。在下一次迭代中,选择了下一个键,因此它打印了第二个键的第一个字母,依此类推。

    现在让我们修改您的代码,以便您可以得到预期的结果...

    for item in test:
        key        = iter(item)
        key_string = ''
        while True:
            try:
                character   = next(key)
                key_string += character
            except StopIteration as exception:
                break
        print('Key : ', key_string)
    

    输出...

    Key :  Default
    Key :  Test
    Key :  Master
    

    您可以尝试制作自己的迭代器来理解 StopIteration 异常。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-02
      • 2021-10-16
      • 1970-01-01
      • 2021-05-10
      • 2011-07-08
      • 2016-10-27
      • 1970-01-01
      相关资源
      最近更新 更多