Как удалить кавычки вокруг значения в строковом представлении словаря?

Как я могу не печатать кавычки вокруг строки? Я понимаю, что это строка, в результате Python добавляет кавычки.

Чтобы дать больше контекста:

def a(content):
    return {'row_contents': content}

print(a("Hello"))

Это дает вывод как:

{'row_contents': 'Hello'}

Я хочу удалить кавычки вокруг Hello при возврате этого (как показано ниже)

{'row_contents': Hello}

Есть ли простой способ добиться этого?


person Prabhat Ratnala    schedule 26.02.2020    source источник
comment
Конечно, это возможно. Но можете ли вы объяснить немного больше, что вы пытаетесь сделать? Вы уверены, что это не проблема XY?   -  person finefoot    schedule 26.02.2020
comment
Ответ уже есть: stackoverflow.com/questions/1482649 /   -  person Manas Khandelwal    schedule 26.02.2020
comment
Отвечает ли это на ваш вопрос? В интерпретаторе Python возврат без '   -  person Manas Khandelwal    schedule 26.02.2020
comment
@ManasKhandelwal: Это не так. Я не хочу использовать печать, так как это не вернет значение, которое я ожидаю в качестве вывода, которое можно было бы использовать в другой переменной.   -  person Prabhat Ratnala    schedule 26.02.2020
comment
@finefoot Я хочу вернуть dict   -  person Prabhat Ratnala    schedule 27.02.2020
comment
@PrabhatRatnala У тебя получилось?   -  person finefoot    schedule 28.02.2020


Ответы (3)


вы можете использовать f string

def a(content):
    return f"{{'row_contents': {content}}}"


print(a("Hello"))

или только это:

def a(content):
    return "{'row_contents':"+content+"}"

Выход:

{'row_contents': Hello}
person Allen Jing    schedule 26.02.2020

Я по-прежнему считаю, что этот вопрос с высокой вероятностью является проблемой XY.

Однако, что касается вашего вопроса в его нынешнем виде: если вы не хотите изменять print, вам остается только изменить возвращаемое значение вашей функции a. Ваш комментарий выше говорит:

Я хочу вернуть dict

Это звучит так, как будто просто возврат измененного строкового представления {'row_contents': content} на самом деле не то, что вы ищете. Тем не менее, сам dict.__repr__ доступен только для чтения, поэтому я думаю, что наиболее близким решением было бы вернуть экземпляр пользовательского подкласса dict:

class CustomDict(dict):
    def __repr__(self):
        return "{" + ", ".join([repr(k) + ": " + str(v) for k, v in self.items()]) + "}"

def a(content):
    return CustomDict({'row_contents': content})

print(a("Hello"))
print(isinstance(a("Hello"), dict))

Что печатает:

{'row_contents': Hello}
True

Возможно, вам потребуется улучшить CustomDict.__repr__ в зависимости от того, какие модификации необходимы для получения желаемого результата. Вы также можете изменить исходное строковое представление super().__repr__().

person finefoot    schedule 27.02.2020

Вы можете просто получить строковое представление словаря и удалить одинарные кавычки.

def a(content):
    return {'row_contents': content}

def print_dict_without_quotes(d):
    print(str(d).replace("'", "").replace('"', ''))

print_dict_without_quotes(a("Hello"))

Выход:

{row_contents: Hello}
person Diptangsu Goswami    schedule 26.02.2020
comment
Тем не менее, это также удаляет кавычки из ключей. - person finefoot; 27.02.2020