【问题标题】:How to convert dictionary to strings?如何将字典转换为字符串?
【发布时间】:2019-11-09 01:55:52
【问题描述】:

我的字典:

{0: {'Id': 'd1', 'name': 'elpato', 'email': '122as@gmail.com'}, 1: {'Id': 'd2', 'name': 'petoka', 'email': 'sss@gmail.com'}}

使用它来获取字典中的名称:

 for ids in [v['name'] for v in my_dict.values()]:
 #subprocess.call(["...", name])
 print(ids)

现在我这样做是为了生成带有在 ids 中生成的值的 jsons

这里使用faker库来创建随机数据

import faker
import json
import subprocess


for ids in [g['name'] for g in my_dict.values()]:

    fake = Faker('en_US')
    print(ids)
    for ind in ids:

        for idx in range(1):

                sms =  {
                    "user_id": ind ,
                    "name": fake.name(),
                    "email": fake.email(),
                    "gender": "MALE",
                    "mother_name": fake.name(),
                    "father_name": fake.name()
                    }

        f_name = '{}.json'.format(ind)
        print(f_name)
        with open(f_name, 'w') as fp:
        json.dump(sms, fp, indent=4)

我需要的输出:elpato.json、petoka.json。

我得到的输出:

  e.json
  l.json
  p.json
  a.json
  t.json
  o.json

  p.json
  e.json
  t.json
  o.json
  k.json
  a.json

【问题讨论】:

  • 什么是Faker?请同时添加该定义,我在my_dict 中也没有看到userId
  • 更新了@DeveshKumarSingh
  • 谢谢,但我仍然没有在 my_dict 中看到 userId 键,还要在文件名中说明您想要的内容,而不仅仅是提供名称
  • 你宁愿需要ind = ids而不是for ind in ids:
  • @furas 它工作但如果我必须打印 10 它只打印 8。当我打印 my_dict 和 f_name 时,它​​显示了 10 个文件,但在本地 pc 中只有 8 个 json 无法弄清楚

标签: python json python-3.x loops dictionary


【解决方案1】:

试试这个,

>>> my_dict = {0: {'Id': 'd1', 'name': 'elpato', 'email': '122as@gmail.com'}, 1: {'Id': 'd2', 'name': 'petoka', 'email': 'sss@gmail.com'}}
>>> ", ".join('{}.json'.format(v) for ik,iv in d.items() for k,v in iv.items() if k == 'name')
'elpato.json, petoka.json' # output in string form

替换为(完整代码),

import faker
import json
import subprocess

my_dict = {0: {'Id': 'd1', 'name': 'elpato', 'email': '122as@gmail.com'}, 1: {'Id': 'd2', 'name': 'petoka', 'email': 'sss@gmail.com'}}

f_names = [(ik, '{}.json'.format(v)) for ik,iv in my_dict.items() for k,v in iv.items() if k == 'name']
for values in f_names:
    fake = Faker('en_US')
    ind,f_name = [*values]
    sms =  {
            "user_id": ind ,
            "name": fake.name(),
            "email": fake.email(),
            "gender": "MALE",
            "mother_name": fake.name(),
            "father_name": fake.name()
            }
    with open(f_name, 'w') as fp:
        json.dump(sms, fp, indent=4)

【讨论】:

  • 单行解grt
  • 我应该在哪一部分使用这一行
  • 像这样:for ids in [g['userId'] for g in my_dict " ".join('{}.json'.format(v) for ik,iv in d.items() for k,v in iv.items() if k == 'name')]:
  • @elmantospetus 不,你不需要使用 for 循环。曾经,您my_dict 包含数据。替换您的完整 for-loop 并添加我的代码。
  • 只有一个 for 循环我应该删除或全部删除。 cz 我正在获取未定义的 ID for ind in ids:
【解决方案2】:

试试这个:

my_dict = {0: {'Id': 'd1', 'name': 'elpato', 'email': '122as@gmail.com'}, 1: {'Id': 'd2', 'name': 'petoka', 'email': 'sss@gmail.com'}}
for k, v in my_dict.items():
    print(my_dict[k]['name']+".json")

或者,尝试使用以下代码代替print(my_dict[k]['name']+".json")

print('{}.json'.format(my_dict[k]['name']))

你也可以试试这个:

for value in my_dict.values():
    print('{}.json'.format(value['name']))

输出:

elpato.json
petoka.json

【讨论】:

    【解决方案3】:
    In [14]: ', '.join(f"{i['name']}.json" for i in my_dict.values())
    Out[14]: 'elpato.json, petoka.json'
    

    另一种选择是使用:

    You can use print(f"{f_name}.josn", end = ', ')
    

    【讨论】:

    • 为什么你发布了两个答案?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-06
    • 2011-01-10
    • 2021-07-25
    相关资源
    最近更新 更多