Как отмечали другие, словари по своей сути неупорядочены. Однако, если проблема заключается в просто отображении словарей упорядоченным способом, вы можете переопределить метод __str__
в подклассе словаря и использовать этот словарь, а не встроенный dict
. Например,
class SortedDisplayDict(dict):
def __str__(self):
return "{" + ", ".join("%r: %r" % (key, self[key]) for key in sorted(self)) + "}"
>>> d = SortedDisplayDict({2:3, 1:89, 4:5, 3:0})
>>> d
{1: 89, 2: 3, 3: 0, 4: 5}
Обратите внимание, что это ничего не меняет о том, как хранятся ключи, порядок их возврата, когда вы перебираете их и т. Д., Только как они отображаются с print
или на консоль python.
Perl не имеет значимых синтаксических вертикальных пробелов, поэтому вы можете просто ввести
$foo = "line1
line2
line3
";
, что эквивалентно
$foo = "line1\nline2\nline3\n";
Обычные кавычки:
# Non-interpolative
my $f = 'line1
line2
line3
';
# Interpolative
my $g = "line1
line2
line3
";
Here-docs позволяют определить любой токен как конец блока цитируемого текста:
# Non-interpolative
my $h = <<'END_TXT';
line1
line2
line3
END_TXT
# Interpolative
my $h = <<"END_TXT";
line1
line2
line3
END_TXT
Операторы кавычек в стиле Regex позволяют использовать практически любой символ в качестве разделителя - так же, как regex позволяет менять разделители.
# Non-interpolative
my $i = q/line1
line2
line3
/;
# Interpolative
my $i = qq{line1
line2
line3
};
UPDATE: Исправлены лексемы here-doc.
Да, у вас есть 2 варианта:
1.heredocs, обратите внимание, что все данные в heredocs интерполируются:
my $ data = <
ваши данные
END
2.qq () см. Например:
print qq ( HTML
$ ваш текст
BODY
HTML );
Да, здесь-док.
$heredoc = <<END;
Some multiline
text and stuff
END