Как вызвать определенный словарь, используя имя пользователя во вложенном словаре, который был сформирован из текстового файла на python

#python #string #dictionary #variables #nested

Вопрос:

Я успешно создал вложенный словарь из текстового файла, но теперь я хочу вызвать определенный дикт из вложенных с помощью переменной

 #Text file
    
    shanm = null|Shanmugaraja|09/04/2002|0149606345|020409140817|0199999999|4870 2929 0108 2870
    jiken = null|Soo Idiot Jiken|08/06/2000|0199999999|020908140213|011349780|8900 2828 1129 0889
    keller = null|Mathew Keller|02/05/2002|0199999999|0203140819|019607892|9801 2828 5596 0889
    
    
 

#Это мой код для вложенного словаря

     keys = ["Full Name", "Date of Birth", "Phone Number",
            "Identification Card (IC) Number", "Emergency Contact Number",
            "Credit /Debit Card Details "]
   username = "jiken"
    
    with open("something.txt", 'r') as f:
        for line in f:
            key, values = line.strip().split(" = ") # note the space around =, to avoid trailing space in key
            values = values.split('|')
            # print(key)
            data2 = {key: dict(zip(keys, values[1:]))}
            print(data2)
    
    
 

#вывод. Это работает, но я не хочу вызывать весь дикт, вместо этого я просто хочу вызвать дикт, который начинается с имени «Джикен», но это не работает

     {'shanm': {'Full Name': 'Shanmugaraja', 'Date of Birth': '09/04/2002', 'Phone Number': '0149606345', 'Identification Card (IC) Number': '020409140817', 'Emergency Contact Number': '0199999999', 'Credit /Debit Card Details ': '4870 2929 0108 2870'}}
    {'jiken': {'Full Name': 'Soo Idiot Jiken', 'Date of Birth': '08/06/2000', 'Phone Number': '0199999999', 'Identification Card (IC) Number': '020908140213', 'Emergency Contact Number': '011349780', 'Credit /Debit Card Details ': '8900 2828 1129 0889'}}
    {'keller': {'Full Name': 'Mathew Keller', 'Date of Birth': '02/05/2002', 'Phone Number': '0199999999', 'Identification Card (IC) Number': '0203140819', 'Emergency Contact Number': '019607892', 'Credit /Debit Card Details ': '9801 2828 5596 0889'}}
    
 

#Желаемый вывод, я хочу, чтобы он просто напечатал диктант в соответствии с переменной имени пользователя в данном случае «jiken».

     {'jiken': {'Full Name': 'Soo Idiot Jiken', 'Date of Birth': '08/06/2000', 'Phone Number': '0199999999', 'Identification Card (IC) Number': '020908140213', 'Emergency Contact Number': '011349780', 'Credit /Debit Card Details ': '8900 2828 1129 0889'}}
 

Комментарии:

1. Я показал вам, как это сделать, в вопросе, который вы опубликовали ранее. Почему ты снова спрашиваешь?

Ответ №1:

Просто проверьте, есть ли key == username , а затем создайте из него данные 2, как показано ниже:

 keys = ["Full Name", "Date of Birth", "Phone Number",
            "Identification Card (IC) Number", "Emergency Contact Number",
            "Credit /Debit Card Details "]
username = "jiken"
    
with open("something.txt", 'r') as f:
    for line in f:
        key, values = line.strip().split(" = ") # note the space around =, to avoid trailing space in key
        values = values.split('|')
        # print(key)
        if key == username:
            data2 = {key: dict(zip(keys, values[1:]))}
            print(data2)
    
 

Ответ №2:

Вы можете попробовать:

 keys = ["Full Name", "Date of Birth", "Phone Number", "Identification Card (IC) Number", "Emergency Contact Number", "Credit /Debit Card Details "]


data2 = {}
    
with open("something.txt", 'r') as f:
    for line in f:
        key, values = line.strip().split(" = ") # note the space around =, to avoid trailing space in key
        values = values.split('|')
        data2[key] = dict(zip(keys, values[1:]))
        
# Here, you can add any username and take respective data.
username = "jiken"      
print(data2[username])

username = "shanm"
print(data2[username])
 

Ответ №3:

Вы можете определить data2 , как list затем добавить dict , чтобы list затем определить функцию поиска, и вы всегда можете выполнить поиск username , как показано ниже:

 >>> data2 = []
>>> with open("something.txt", 'r') as f:
...    for line in f:
...        key, values = line.strip().split(" = ")
...        values = values.split('|')
...        data2.append({key: dict(zip(keys, values[1:]))})

# after read file you have this data2
>>> data2 = [{'shanm': {'Full Name': 'Shanmugaraja', 'Date of Birth': '09/04/2002', 'Phone Number': '0149606345', 'Identification Card (IC) Number': '020409140817', 'Emergency Contact Number': '0199999999', 'Credit /Debit Card Details ': '4870 2929 0108 2870'}},
...            {'jiken': {'Full Name': 'Soo Idiot Jiken', 'Date of Birth': '08/06/2000', 'Phone Number': '0199999999', 'Identification Card (IC) Number': '020908140213', 'Emergency Contact Number': '011349780', 'Credit /Debit Card Details ': '8900 2828 1129 0889'}},
...            {'keller': {'Full Name': 'Mathew Keller', 'Date of Birth': '02/05/2002', 'Phone Number': '0199999999', 'Identification Card (IC) Number': '0203140819', 'Emergency Contact Number': '019607892', 'Credit /Debit Card Details ': '9801 2828 5596 0889'}}]


>>> def ret_dct_user(dict_username , username):
...    for dct in dict_username:
...        if username in dct:
...           return dct
 

Выход:

 >>> ret_dct_user(data2, 'jiken')
{'jiken': {'Full Name': 'Soo Idiot Jiken',
  'Date of Birth': '08/06/2000',
  'Phone Number': '0199999999',
  'Identification Card (IC) Number': '020908140213',
  'Emergency Contact Number': '011349780',
  'Credit /Debit Card Details ': '8900 2828 1129 0889'}}

>>> ret_dct_user(data2, 'shanm')
{'shanm': {'Full Name': 'Shanmugaraja',
  'Date of Birth': '09/04/2002',
  'Phone Number': '0149606345',
  'Identification Card (IC) Number': '020409140817',
  'Emergency Contact Number': '0199999999',
  'Credit /Debit Card Details ': '4870 2929 0108 2870'}}