Как преобразовать словарь в строки? - PullRequest
0 голосов
/ 27 июня 2019

my_dict:

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

используя это, чтобы захватить имя в dicts:

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

Сейчас я делаю это для генерации jsons со значениями, сгенерированными в ids

здесь используется фейкерная библиотека для создания случайных данных

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

Ответы [ 3 ]

1 голос
/ 27 июня 2019

Попробуйте это,

>>> 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

Заменить на (полный код), * ​​1004 *

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)
0 голосов
/ 27 июня 2019
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 = ', ')
0 голосов
/ 27 июня 2019

Попробуйте это:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...